首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

批量动态创建控件出错(请)

2012-02-22 
批量动态创建控件出错(请高手指点)动态创建单个控件时没问题,但用数组创建多时,程序在执行到btn[i] : TB

批量动态创建控件出错(请高手指点)
动态创建单个控件时没问题,但用数组创建多时,程序在执行到'btn[i] := TButton.Create(Form1);'就报错了:
'Access violation at address 004A1736 in module 'Project1.exe'.请大侠指教了.创建别的类型的控件也是这样.

procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin
  for i := 1 to 5 do
  begin
  btn[i] := TButton.Create(Form1);
  btn[i].Parent := Form1;
  btn[i].Height := 30;
  btn[i].Width := 75;
  btn[i].Visible := True;
  btn[i].top := Self.Top + 50 * i;
  btn[i].Left := Self.Left + 50 * i;
  btn[i].Caption := '动态控件';
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  btn := TButton.Create(Form1);
  btn.Parent := Form1;
  btn.Height := 30;
  btn.Width := 75;
  btn.Visible := True;
  btn.top := Self.Top + 50 * i;
  btn.Left := Self.Left + 50 * i;
  btn.Caption := '动态控件';
end;

[解决办法]

Delphi(Pascal) code
var   i: integer;  btn:array[1..5] of TButton;begin  for i:= 1 to 5 do  begin    btn[i]:= TButton.Create(Form1);    btn[i].Parent:= Form1;    btn[i].Height:= 30;    btn[i].Width:= 75;    btn[i].Visible:= True;    btn[i].top:=Self.Top+50*i;    btn[i].Left:=Self.Left+50*i;    btn[i].Caption:='动态控件';  end;end;
[解决办法]
Delphi(Pascal) code
var  i: integer;  btn:array of TButton;  count:Integer;begin  count:=10;//创建10个  setlength(btn,count);  for i:= 0 to count-1 do  begin    btn[i]:= TButton.Create(Form1);    btn[i].Parent:= Form1;    btn[i].Height:= 30;    btn[i].Width:= 75;    btn[i].Visible:= True;    btn[i].top:=Self.Top+50*i;    btn[i].Left:=Self.Left+50*i;    btn[i].Caption:='动态控件';  end;end;
[解决办法]
数组越界了!
数组下标是从0开始的:
DST.First; 
if not DST.Eof then 
begin 
i := 0; //把1改成0
SetLength(BitBtnArry, DST.RecordCount); 
while i <= DST.RecordCount -1 do // 这里给DST.RecordCount - 1
begin 
.......
end; 
end; 

释放的时候:
在Form1.Destroy中写一个:SetLength(BitBtnArry, 0);就可以了,其他的去掉。
Form1 := nil;//不要这么写,如果要动态释放窗体并赋为nil,可以用FreeAndNil(Form1);
[解决办法]
form是动态创建

FreeAndNil(Form1);

热点排行