在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
为零。
这是正常行为还是我缺少了什么? 如果是,如何访问在运行时创建的控件?
答案 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以获取完整的解释。
还要检查以下属性: