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;
展开
 我来答
百度网友ca6ad38
2018-12-02 · TA获得超过157个赞
知道小有建树答主
回答量:237
采纳率:91%
帮助的人:87.7万
展开全部

因为并没有指定持有者

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 来获得

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式