2016-11-12 35 views
2

我試圖使用在設計器中配置的TPanel上的分配,但它不起作用。Firemonkey將TPanel分配給TPanel不起作用XE10.1柏林

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,它應該與我想要分配的TPanel相同,包括所有子控件。

+0

1)請提供_ **滿**和** **精準_錯誤信息(德語IST好吧,德恩ES noetig信德)。消息中可能有重要的線索。 2)也就是說,我無法使用Delphi來確認:但是看起來像TPanel可能會被故意禁用。所以請[編輯你的問題](http://stackoverflow.com/posts/40558827/edit)來解釋你想達到什麼/你的目標是什麼。可能有更合適的解決根本問題的方法。 –

+0

感謝您的快速回復!我編輯了我的答案:) Basiclly我想添加TPanel的,就像我設計的TPanel一樣的所有childerns。 ^^ – MaxMadman

回答

3

大多數VCL和FMX組件,包括TPanel不要實施Assign()可言。通常,只有用於組件屬性的實用程序類實現Assign()才能在其屬性設置器中使用。

對於你正在嘗試的,你應該使用一個幀而不是TPanel。您可以在設計時就像Form或DataModule一樣設計Frame,然後根據需要在運行時創建它的實例。

見英巴卡迪諾的更多細節文檔:

Frames in FireMonkey

2

不幸的是,我目前無法訪問Delphi進行確認。但似乎Assign ing TPanel故意被框架阻止。

也就是說,你想要什麼,以實現與似乎TFrame

更適當的處理一旦你創建你的框架,您應該可以使用下面的代碼來創建在運行時的新實例。

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;