Reputation: 3040
I have a custom Firemonkey control that has several sub components. These sub components have OnClick events associated with them that are setup in the control's constructor. I have noticed that when I click on the custom control in my design view, the OnClick events of these sub components are getting fired.
Is there a particular setting or best practice I need to employ to prevent this from happening?
Is there something I can check in my C++ code to see if this event is being run in the designer vs at run time? Something like:
void __fastcall MyControlOnClick( TObject * Sender )
{
if( InDesigner == false )
{
//do stuff here
}
}
Upvotes: 0
Views: 103
Reputation: 595792
Use the ComponentState
property. It has a csDesigning
flag enabled when your control is being used in the Form Designer.
void __fastcall MyControl::SubControlClick(TObject *Sender)
{
if( !ComponentState.Contains(csDesigning) )
{
//do stuff here
}
}
Alternatively, simply don't assign the OnClick
handlers at design-time to begin with:
__fastcall MyControl::MyControl(TComponent *Owner)
: TBaseControl(Owner)
{
...
FSubControl = new TWhatever(this);
if( !ComponentState.Contains(csDesigning) )
FSubControl->OnClick = &SubControlClick;
...
}
Upvotes: 2