FireMonkey自定义控制点击事件在设计师中发射

Firemonkey custom control click events firing in designer

本文关键字:设计师 发射 事件 自定义 控制 FireMonkey      更新时间:2023-10-16

我有一个具有多个子组件的自定义firemonkey控件。这些子组件具有与它们在控件构造函数中设置的相关事件。我注意到,当我在设计视图中单击自定义控件时,这些子组件的on Click事件就会被触发。

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

我可以在我的C 代码中检查一些东西,以查看此事件是否在运行时与设计人员的相关性进行?类似:

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

使用ComponentState属性。当您的控件在表单设计器中使用时,它具有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;
    ...
}