Wieso wird wxButton Handler 2mal aufgerufen?
-
Abend,
ich habe einen Handler für Buttonklicks geschrieben:
class MyButtonEventHandler : public wxEvtHandler { public: void MethodOK(wxCommandEvent& e) { wxMessageBox(_T("HALLO"), _T("Caption"), wxOK | wxICON_INFORMATION); // e.Skip(); } protected: DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(MyButtonEventHandler, wxEvtHandler) EVT_BUTTON (wxID_OK, MyButtonEventHandler::MethodOK) END_EVENT_TABLE() // Ich füge den Handler in meinem Frame Construktor so hinzu: wxButton* button = new wxButton(this, wxID_OK, wxT("OK"), MyButtonEventHandler* e = new MyButtonEventHandler; button->SetEventHandler(e);
Wenn ich das so ausführe (mit dem auskommentieren e.Skip()) klappt alles wunderbar: Bei einem Klick auf den Button öffnet sich eine MessageBox mit "HALLO". Aber wenn ich e.Skip() einkommentiere und auf den Button klicke, dann öffnet sich bei einem Buttonklick wieder die Messagebox mit "HALLO" und wenn ich die MessageBox wegklicke, kommt die selbe Messagebox mit dem "HALLO" NOCHMAL.
Wieso kommt die nochmal? Ich dachte e.Skip() heißt: Fahre fort mit dem Eventhandling, sprich er schaut die Eventhandler der Parents an (also Frame etc), aber in denen gibt es doch keinen EVT_BUTTON EventHandler??PS: Muss ich eigentlich in wxWidgets delete auf mit new erzeugte Objekte aufrufen (hier quasi button und e)?
-
Ähm, wieso schreibst du überhaupt einen eigenen Eventhandler für einen Button?!?
-
phlox81 schrieb:
Ähm, wieso schreibst du überhaupt einen eigenen Eventhandler für einen Button?!?
Um nicht von wxButton ableiten oder es in einem Parent die Events bearbeiten zu müssen?
-
button2 schrieb:
phlox81 schrieb:
Ähm, wieso schreibst du überhaupt einen eigenen Eventhandler für einen Button?!?
Um nicht von wxButton ableiten oder es in einem Parent die Events bearbeiten zu müssen?
Schau doch mal in das wxTutorial im Magazin, da steht, wie man in wxWidgets die Buttonevents eigentlich bearbeitet.
Die Sache mit Skip kann ich dir da aber auch nicht erklären.
-
Das mit dem e.Skip wird nur gebraucht, wenn es mehrere potentielle EventHandler für ein Ereignis gibt und der eigene EventHandler dafür nicht verantwortlich ist.
In deinem Fall gibt es wohl nur einen und der wird dann immer wieder aufgerufen.