Delegates/EventHandler von Controls bekommen

buell

Mitglied
Hallo,

ich suche eine Möglichkeit alle EventHandler einer Form zur Laufzeit zu ermitteln. Man muss dabei davon ausgehen, dass man die View und den Controller städnig austauschen kann. Ich kann also nicht direkt auf eine zB on_btn_click(...) Methode zugreifen. Bis jetzt bin ich so weit, dass ich in einer Schleife alle Controls der Form durchlaufe. Nun hätte ich noch gern die verknüpften Events der Controls, also wenn zB ein MouseDown auf ein Textfeld gesetzt ist will ich das haben. Welche Events es gibt kann ich nicht sagen, ich brauche einfach alle...

need help ;-)
 
Was willst du denn genau machen?

Alle möglichen und unmöglichen Events zu abonnieren ist nicht zweckmäßig.
 
Ich glaube, er will zur Laufzeit rausfinden, für welche Controls für welches Event ein Handler im Code ist... Das geht vielleicht irgendwie mit Reflection?
 
Sinn hats wirklich nicht viel, aber gehen würde das mit Reflections.

Nehmen wir an, du hast eine Textbox und willst alle Events dazu herausfinden. Vom ersten Event willst du dann die dazugehörige Methode ermitteln und sie aufrufen.

Code:
TextBox objTextBox = new TextBox();
EventInfo[] objInfo = objTextBox.GetType().GetEvents();
MethodInfo objMethod = objInfo[0].GetRaiseMethod(true);
if (objMethod != null)
{
     objMethod.Invoke(objTextBox, new object[] { });
}

Als Problem daran fällt mir aber auf, das du damit nur eine Methode pro Event kriegst. Mich wundert, obs eine Möglichkeit gibt, alle Handler zu ermitteln?

Weis das jemand?
 
@engelmarkus:
ja genau das will ich.

Ich will ein Framework schreiben um Windows Forms mit weiteren Eingabemöglichkeiten (in diesem Fall Sprache) zu erweitern. Sofern eine Spracheingabe erfolgt soll der/die Eventhandler der View angesprochen werden. Da das ganze für x-beliebige Anwendungen funktionieren soll muss ich die Handler dynamisch ermitteln. Ich verfolge jetzt gerade die Möglichkeit ein eigenes Template für Visual Studio zu basteln welches Windows.Forms überschreibt... mal schauen was dabei rauskommt

@Kyoko:
ich werde das mal probieren, allerdings sehe ich das gleiche Problem wie du...
 
Also zunächst einmal funktioniert die Sache mit dem Template schon ganz gut. Ich kann jetzt zumindest zur Laufzeit ermitteln welches Control ein Event hat und welches nicht.

@Kyoko:
Die von dir beschriebene Variante funktioniert so leider nicht. Wenn man deinen Code genau ansieht, dann fällt auch auf, dass man zwar alle zulässigen Eventtypen des aktuell untersuchten Controls ermitteln kann, dann aber die Beziehung zum Control selbst fehlt. Also die Bedingung if (objMethod != null) wird nie erfüllt.
 
@Kyoko:

Du brauchst dich nicht zu entschuldigen, ich bin dankbar für jede Anregung auch wenn sie nicht direkt zum Ziel führt, also Danke!

@all:

Habe mein Problem auf eine etwas aufwendige Art gelöst. Ich habe die ganzen Controls die ich brauche überschrieben. Auf diese Weise komme ich direkt an die geschützten Methoden OnClick usw ran. Durch die Erzeugung eines Templates kann der spätere Entwickler trotzdem komfortabel in Visual Studio seine Buttons und Co erstellen, heißen dann halt zB MyFramework.MyButton usw aber ich denke das ist OK.

Nochmal: Danke an alle!
 
Zurück