2009-12-22 2 views
0

J'ai une chaîne comme ceci:Définir un Handlers événement d'une chaîne

string myEventName = "myButton_Click"; 

Puis-je créer un gestionnaires d'événements pour le clic de quelques boutons, mais en passant la chaîne comme paramètre, le « MyButton_Click » méthode existe déjà:

private void myButton_Click (object sender, RoutedEventArgs e) { } 

Est-ce possible, en utilisant la réflexion ou autre type de truc?

Merci.

+0

Cela semble être une manière compliquée d'établir un gestionnaire. Y at-il une raison pour laquelle vous avez le nom d'une méthode dans une variable de chaîne? – LBushkin

Répondre

1

Oui, vous pouvez utiliser la réflexion. Il est assez laid, mais il devrait fonctionner:

// Here, "target" is the instance you want to use when calling 
// myButton_Click, and "button" is the button you want to 
// attach the handler to. 
Type type = target.GetType(); 
MethodInfo method = type.GetMethod(myEventName, 
    BindingFlags.Instance | BindingFlags.NonPublic); 
EventHandler handler = (EventHandler) Delegate.CreateInstance(
    typeof(EventHandler), target, method); 
button.Click += handler; 

Vous aurez besoin de beaucoup de contrôle d'erreur bien sûr, mais c'est la procédure de base. En passant, votre variable serait mieux nommée "myHandlerName" ou quelque chose de similaire - ce n'est pas l'événement lui-même.

+0

+ 1 pour élever la convention de nommage ... il est toujours utile de savoir comment nous devrions nommer les choses –

Questions connexes