From: Andreas F. <an...@fa...> - 2013-11-23 11:13:43
|
Hi John, On 21.11.2013 at 19:38 John Labenski wrote: > This would be the expected behavior, I think. You are installing > TWO callback handlers so both are called if their patterns match. > I would guess that the difference is that maybe you are calling > event.Skip(true/false) or not at all in the two different programs. > Note that not calling event.Skip() is the same as calling > event.Skip(false) and that skipping the event means that the event > is propagated to the next matching handler (if one exists). > > For simplicity, if you need the wxID_ANY I would only have that one > handler and use a "case" style statement to route the event to any specialized handler. Ok, this has turned out to be wxWidgets peculiarity. Consider the following event table: BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_RADIOBOX(RadioPage_Radio, MyFrame::OnRadioBox) EVT_RADIOBOX(wxID_ANY, MyFrame::OnCheckOrRadioBox) END_EVENT_TABLE() To convert this event table into a sequence of Connect() calls, you have to invert the order, i.e.: Connect(wxID_ANY, wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler(MyFrame::OnCheckOrRadioBox)); Connect(RadioPage_Radio, wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler(MyFrame::OnRadioBox)); This is because Connect() adds new events at the *beginning* of the event handler list. I didn't know that and used the order of the event table when converting it to a series of Connect() calls which led to the general handler getting called first. -- Best regards, Andreas Falkenhahn mailto:an...@fa... |