2012-02-28 44 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