delphi Self.Componentcount得出的数量不包含动态生成的控件数量,为什么
procedureTForm1.btn1Click(Sender:TObject);vartlab:TLabel;tedt:TEdit;I:Integer;beginds...
procedure TForm1.btn1Click(Sender: TObject);
var
tlab:TLabel;
tedt:TEdit;
I: Integer;
begin
ds1.Open;
for I := 0 to ds1.FieldCount-1 do
begin
with TLabel.Create(nil) do begin
Parent := Form1;
//name:='label'+inttostr(i);
name:='lbl'+ds1.Fields[i].FieldName;
Caption:=Name;
top:=btn1.Top+btn1.Height+i*20;
Left:=30;
Width := 150;//大小信息
Height := 20;
form1.Height:=top+60;
end;
with TEdit.Create(nil) do begin
Parent := Form1;
//name:='label'+inttostr(i);
name:='edt'+ds1.Fields[i].FieldName;
Caption:=Name;
top:=btn1.Top+btn1.Height+i*20;
Left:=200;
Width :=150;//大小信息
Height := 20;
form1.Height:=top+60;
lst1.Items.Add(name);
text:=IntToStr(lst1.Items.IndexOf(name));
OnKeyPress:=tkeypress;
end;
end;
ShowMessage(IntToStr(Self.Componentcount));//得到的数量是5(含3个不可视控件),而不是实际的控件数33(动态生成了28个控件)
end; 展开
var
tlab:TLabel;
tedt:TEdit;
I: Integer;
begin
ds1.Open;
for I := 0 to ds1.FieldCount-1 do
begin
with TLabel.Create(nil) do begin
Parent := Form1;
//name:='label'+inttostr(i);
name:='lbl'+ds1.Fields[i].FieldName;
Caption:=Name;
top:=btn1.Top+btn1.Height+i*20;
Left:=30;
Width := 150;//大小信息
Height := 20;
form1.Height:=top+60;
end;
with TEdit.Create(nil) do begin
Parent := Form1;
//name:='label'+inttostr(i);
name:='edt'+ds1.Fields[i].FieldName;
Caption:=Name;
top:=btn1.Top+btn1.Height+i*20;
Left:=200;
Width :=150;//大小信息
Height := 20;
form1.Height:=top+60;
lst1.Items.Add(name);
text:=IntToStr(lst1.Items.IndexOf(name));
OnKeyPress:=tkeypress;
end;
end;
ShowMessage(IntToStr(Self.Componentcount));//得到的数量是5(含3个不可视控件),而不是实际的控件数33(动态生成了28个控件)
end; 展开
1个回答
展开全部
因为并没有指定持有者
Owner 属性为 nil
constructor TComponent.Create(AOwner: TComponent);
begin
FComponentStyle := [csInheritable];
if AOwner <> nil then AOwner.InsertComponent(Self);
end;
with TEdit.Create(nil) do begin
改为
with TEdit.Create(Self) do begin
或者 指定了 Parent
可以通过 Controls 和 ControlCount 来获得
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询