2012-02-28 61 views
3

我希望能夠限制創建組件的位置。創建約束組件父項

例如像,TMyChild可能是一個TButton和TMyParent可能是TPanel, 當我放棄MyChild到一些其他的成分我想MyChild檢查 是在TMyParent/TPanel正在創建或不是。

如果是的話,罰款讓這樣做,如果在TMyParent/TPanel沒有創建它,然後取消 的TMyChild創建和顯示一個消息,說是這樣的:「對不起,MyChild需要MyParent要創建! 」。

謝謝!

回答

9

您必須重寫Controls.TControl.SetParent方法。

TMyChild = class(TControl) 
    protected 
    procedure SetParent(AParent: TWinControl); override; 
    end; 


procedure TMyChild.SetParent(AParent: TWinControl); 
begin 
    if (AParent <> nil) then 
    begin 
    if not (AParent is TMyParent) then 
     raise Exception.CreateFmt('Sorry, MyChild needs to be created in MyParent!', [ClassName]); 
    end; 
    inherited; 
end; 
+2

這不會_cancel_或_prevent_放置。之後可能調用繼承? – NGLN 2012-02-28 08:35:40

+0

謝謝@NGLN,代碼已修復。 – RRUZ 2012-02-28 15:24:26

+0

我不能在代碼中看到任何取消。 也許Destroy;會是一個很好的取消? – xaid 2012-02-28 20:15:51