我有一个自定义Firemonkey控件,它有几个子组件。这些子组件具有与它们关联的OnClick事件,这些事件在控件的构造函数中设置。我注意到,当我在设计视图中单击自定义控件时,这些子组件的OnClick事件将被触发。
我是否需要采用特定的设置或最佳做法来防止这种情况发生?
我可以在C ++代码中检查是否有东西可以在设计器和运行时查看此事件是否正在运行?类似的东西:
void __fastcall MyControlOnClick( TObject * Sender )
{
if( InDesigner == false )
{
//do stuff here
}
}
答案 0 :(得分:2)
使用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;
...
}