Eventhandler Funktionsname aus String
-
Hallo,
Ich wollte einem Button dynamisch ein Eventhandler zuweisen. Normalerweise hat man ja folgendes:
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
nun suche ich nach eine Funktion/Eigenschaft oder Moeglichkeit wie man die Adresse der Funktion ueber eine Zeichenkette erhalten kann, etwa so (Pseudocode):
this->button1->Click += gcnew System::EventHandler(this, GetMethodFromString("Form1::button1_Click")); // GetMethodFromString soll den Zeiger auf die Funktion zurueckliefern.
Nun stehe ich voellig auf dem Schlauch wie ich die Funktion GetMethodFromString implementieren koennte...
Ist ein solcher Verweis vielleicht in MethodInfo enthalten, dann koennten man diesen nach Vergleich der MethodInfo-Eigenschaft Name mit dem String zurueckliefern ?
Danke und Gruss
Simon
-
Mach eine Handler Funktion und prüfe drinnen dann vom wem der Aufruf stammt (via sender z.B.).
Simon
-
danke fuer die Antwort. Ich wollte aber dem Button einen Handler meiner Wahl zur Laufzeit (ueber den String) zuweisen. Du meinst doch sicher, ich solle dem button1 einen allgemeinen Handler zuweisen und ueber sender die quelle nachtraeglich ermitteln?
Gruss
Simon
-
jap ... alternativ
public ref class SpecialButton : public Button
-
mmmh. Versteh ich noch nicht so recht. Abgeleitete Klasse von Button? Das macht doch nur Sinn wenn der Funktionsname zur Kompilierzeit bereits feststeht...
Ich wollte eigentlich, dass der Anwender den Handler einem Button seiner Wahl zur Laufzeit zuordnen kann. Die Handler selbst stehen natuerlich schon zur Kompilierzeit fest, sind also deklariert und definiert.
Nur die Zuweisung soll dynamisch moeglich sein, wie anfang von mir in Pseudocode beschrieben. Die Loesung von theta find ich schon ganz gut, aber geht es auch noch anders? Also z. B. String -> Funktionsadresse.
-
public ref abstract class ButtonClickObject { public: void action(); };
public ref class BCOAction1 : public ButtonClickObject //.. public ref class BCOActionFormatC : public ButtonClickObject
public ref class SpecialButton : public Button { public: void setButtonClickObject(ButtonClickObject bco); void handleButtonClick(/* -- */) { buttonclickobject->action(); } }
-
wo kommt buttonclickobject in handleButtonClick her? Ist das ein Member von SpecialButton, oder ein Argument von handleButtonClick?
Was soll bei handleButtonClick uebergeben werden /* --- */ ?
Ich vermute Du versuchst mir zu vermitteln, dass ich das mit ueberschriebenen Methoden machen koennte, richtig?
Je nachdem auf welchen Button der Anwender clickt, wird der entsprechende Handler aufgerufen.
Waere mir am liebsten das mit Reflections zu machen...
-
Ich vermute Du versuchst mir zu vermitteln, dass ich das mit ueberschriebenen Methoden machen koennte, richtig?
Je nachdem auf welchen Button der Anwender clickt, wird der entsprechende Handler aufgerufen.Waere mir am liebsten das mit Reflections zu machen...
Du kannst Dir auch ein Bein brechen
-
Ok, vielen Dank
! Dann werde ich mal die schmerzlose Variante probieren. Danach kann ich mir immer noch das Bein brechen