我尝试在设计师配置的TPanel
上使用分配,但它不起作用。
var
LPanel : TPanel;
begin
LPanel := TPanel.Create(nil);
LPanel.Assign(Panel1); // Panel1 is a panel made in the form designer
end;
错误消息类似于" TPanel无法分配给TPanel。" (我有RAD Studio的德语版本......关于德语的确切错误信息是" TPanel kann nicht zu TPanel zugewiesen werden。")
我使用表单设计器在其中设计了包含其他组件的TPanel。现在我想将新的TPanel
实例添加到TLayout,该TLayout应该与我想要分配的TPanel相同,包括所有子控件。
答案 0 :(得分:3)
大多数VCL和FMX组件,包括TPanel
,根本不会实现Assign()
。通常,只有用于组件属性的实用程序类才会在其属性设置器中实现Assign()
。
对于您尝试的内容,您应该使用框架而不是TPanel
。您可以在设计时设计一个Frame,就像Form或DataModule一样,然后根据需要在运行时创建它的实例。
有关详细信息,请参阅Embarcadero的文档:
答案 1 :(得分:2)
不幸的是,我目前无法访问Delphi进行确认。但似乎框架故意阻止Assign
TPanel
uses
...
frMyFrame;
...
var
LNewFrame : TFrame;
begin
LNewFrame := TMyFrame.Create(nil); //Are you sure you don't want to assign an owner?
LNewFrame.Parent := Self; //Assuming you want to position the frame directly on the form
//Otherwise you could place it on a simple panel.
//Set attributes for positioning
//Don't forget resource management (see ownership comment)
...
end;
。
那就是说,你试图实现的目标似乎更适合用TFrame
创建框架后,您应该能够使用以下代码在运行时创建新实例。
{{1}}