如何将自定义属性添加到 FireMonkey 中动态(以编程方式)创建的控件?
How to add custom properties to dynamically (programmatically) created controls in FireMonkey?
在我正在构建的应用程序中,我正在向表单上的 TFramedScrollbox
控件动态添加控件。
这是我正在使用的代码:
pnlNew: TFlowLayout;
pnlNew := TFlowLayout.Create(sbMain);
pnlNew.Align := TAlignLayout.Top;
pnlNew.ClipChildren := True;
pnlNew.Parent := sbMain;
并且此代码按预期工作。
但我想向这个以编程方式创建的控件添加动态属性,如 OrgHeight、CreateOrder、PrevControl 等。
如何操作?
TIA
您可以在表单定义上方声明一个“插入器 class”,如下所示:
TFlowLayout = class(FMX.Layouts.TFlowLayout) // note fully qualified name of the class we inherit from
private
OrgHeight: single;
//... other properties you want to add
end;
TForm36 = class(TForm)
sbMain: TFramedScrollBox;
Button1: TButton;
//...
严格来说,在这种情况下,当您在运行时动态创建实例时,您实际上不需要在表单定义之前定义“interposer class”。如果在设计时您的表单上已经有一个 TFlowLayout
的实例,那么您将不得不这样做。
从现在开始,您在表单上实例化的 TFlowLayout
具有这些添加的属性,您可以编写例如:
pnlNew := TFlowLayout.Create(sbMain);
pnlNew.Align := TAlignLayout.Top;
pnlNew.ClipChildren := True;
pnlNew.Parent := sbMain;
pnlNew.OrgHeight := pnlNew.Height;
pnlNew.Height := 150;
在我正在构建的应用程序中,我正在向表单上的 TFramedScrollbox
控件动态添加控件。
这是我正在使用的代码:
pnlNew: TFlowLayout;
pnlNew := TFlowLayout.Create(sbMain);
pnlNew.Align := TAlignLayout.Top;
pnlNew.ClipChildren := True;
pnlNew.Parent := sbMain;
并且此代码按预期工作。
但我想向这个以编程方式创建的控件添加动态属性,如 OrgHeight、CreateOrder、PrevControl 等。
如何操作?
TIA
您可以在表单定义上方声明一个“插入器 class”,如下所示:
TFlowLayout = class(FMX.Layouts.TFlowLayout) // note fully qualified name of the class we inherit from
private
OrgHeight: single;
//... other properties you want to add
end;
TForm36 = class(TForm)
sbMain: TFramedScrollBox;
Button1: TButton;
//...
严格来说,在这种情况下,当您在运行时动态创建实例时,您实际上不需要在表单定义之前定义“interposer class”。如果在设计时您的表单上已经有一个 TFlowLayout
的实例,那么您将不得不这样做。
从现在开始,您在表单上实例化的 TFlowLayout
具有这些添加的属性,您可以编写例如:
pnlNew := TFlowLayout.Create(sbMain);
pnlNew.Align := TAlignLayout.Top;
pnlNew.ClipChildren := True;
pnlNew.Parent := sbMain;
pnlNew.OrgHeight := pnlNew.Height;
pnlNew.Height := 150;