繁体   English   中英

在设计器中触发Firemonkey自定义控件单击事件

[英]Firemonkey custom control click events firing in designer

我有一个具有几个子组件的自定义Firemonkey控件。 这些子组件具有与它们关联的OnClick事件,这些事件在控件的构造函数中设置。 我注意到,当我在设计视图中单击自定义控件时,将触发这些子组件的OnClick事件。

我需要采用特定的设置或最佳实践来防止这种情况发生吗?

我可以在C ++代码中检查一下该事件是否在设计器中运行还是在运行时运行吗? 就像是:

void __fastcall MyControlOnClick( TObject * Sender )
{
    if( InDesigner == false )
    {
         //do stuff here
    }
}

使用ComponentState属性。 在窗体设计器中使用控件时, csDesigning启用csDesigning标志。

void __fastcall MyControl::SubControlClick(TObject *Sender)
{
    if( !ComponentState.Contains(csDesigning) )
    {
         //do stuff here
    }
}

另外,不要在设计时就从分配OnClick处理程序开始:

__fastcall MyControl::MyControl(TComponent *Owner)
    : TBaseControl(Owner)
{
    ...
    FSubControl = new TWhatever(this);
    if( !ComponentState.Contains(csDesigning) )
        FSubControl->OnClick = &SubControlClick;
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM