2017-03-01 54 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; 
    ... 
}