Firemonkey将TPanel分配给TPanel并不适用于XE10.1 Berlin

时间:2016-11-12 02:02:52

标签: delphi firemonkey

我尝试在设计师配置的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相同,包括所有子控件。

2 个答案:

答案 0 :(得分:3)

大多数VCL和FMX组件,包括TPanel根本不会实现Assign()。通常,只有用于组件属性的实用程序类才会在其属性设置器中实现Assign()

对于您尝试的内容,您应该使用框架而不是TPanel。您可以在设计时设计一个Frame,就像Form或DataModule一样,然后根据需要在运行时创建它的实例。

有关详细信息,请参阅Embarcadero的文档:

Frames in FireMonkey

答案 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}}