2017-03-01 75 views
0

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

是否有一个特定的设置或最佳实践,我需要用来防止这种情况发生?

有什么我可以检查我的C++代码,看看这个事件是否在设计器和运行时运行?例如:

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

回答

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; 
    ... 
}