为什么运行时不在Controls []中创建TControl子级?

时间:2019-05-23 11:31:12

标签: delphi

在VCL应用程序中,我需要访问TControl的所有TForm子级。子级被声明为私有TControl变量,并在运行时使用

创建

我使用了以下代码:

unit MainForm;

interface
uses
   Vcl.Controls, Vcl.Forms, Vcl.StdCtrls, Vcl.ExtCtrls, System.Classes;

type
   TForm1 = class(TForm)
      procedure FormCreate(Sender: TObject);

      private
         myControl: tControl;
   end;

implementation
procedure TForm1.FormCreate(Sender: TObject);
var 
   NumOfControls: integer;
begin

   myControl:= tControl.Create(self);

   NumOfControls:= ControlCount;

end;

但是NumOfControls为零。

这是正常行为还是我缺少了什么? 如果是,如何访问在运行时创建的控件?

2 个答案:

答案 0 :(得分:1)

Ondrej Kelle答案是正确的。

  

创建控件后,分配父级:   C := TControl.Create(Self);   C.Parent := Self;

Create(Self);不会默认将Parent参数指定为创建者。

谢谢

答案 1 :(得分:0)

您将Self设置为myControl所有者,而不是其父项

如果您需要使Self成为myControl的父级,则需要设置其Parent属性:

myControl.Parent := Self;

所有者父母是两回事。 基本上,所有者负责管理其自有组件的生命,而父级则负责与控件的外观更为相关的方面,请查看this以获取完整的解释。

还要检查以下属性: