Comment passer d'un événement à une méthode?
Je voudrais créer une méthode qui prend un événement comme un argument et ajoute gestionnaire d'événements à elle de le gérer correctement. Comme ceci:
J'ai deux événements:
public event EventHandler Click;
public event EventHandler Click2;
Maintenant, je voudrais passer à un événement particulier à ma méthode comme ceci (pseudo-code):
public AttachToHandleEvent(EventHandler MyEvent)
{
MyEvent += Item_Click;
}
private void Item_Click(object sender, EventArgs e)
{
MessageBox.Show("lalala");
}
ToolStripMenuItem tool = new ToolStripMenuItem();
AttachToHandleEvent(tool.Click);
Est-il possible?
J'ai remarqué que ce code a bien fonctionné, et retourné à mon projet et remarqué que lorsque je passe un événement déclaré, dans ma classe, il fonctionne, mais quand je passe la manifestation de l'autre classe, il ne fonctionne toujours pas.
Ce que je reçois est cette erreur:
L'événement
'Système.De Windows.Les formulaires.ToolStripItem.Cliquez sur'
ne peut apparaître sur le côté gauche
de += ou -=
- Oui, vous êtes si intelligent!
- Minchev je ne sais pas pourquoi... Vous étiez d'abord et m'a aidé. Je vous remercie.
- J'ai mis à jour la question de réfléchir à la question, je 'm en acier de traiter avec
- Voir mon edit. C'est parce que déjà l'événement a été déclaré dans la même classe, où elle a été invoquée.
- Merci
Vous devez vous connecter pour publier un commentaire.
Ma réponse originale à cette question a été adapté à partir de l'intérieur de la classe qui a défini l'événement, mais vous avez depuis la mise à jour de votre question afin de refléter que vous souhaitez accomplir ce à partir de l'extérieur de la classe de définition, donc je l'ai frappé que.
Seule la classe qui définit un événement peut se référer à l'implicite délégué de la variable que l'événement utilise. De l'extérieur de la classe, vous avez seulement accès à la
add
etremove
méthodes, via+=
et-=
. Cela signifie que vous ne pouvez pas faire ce que vous demandez, directement. Vous pouvez, cependant, utiliser une approche fonctionnelle.J'ai fait comme ceci:
Merci à vous tous pour les conseils. Cette solution ne pourrait pas être fait sans votre aide.
Il n'est pas possible. Vous pouvez utiliser un délégué au lieu d'un événement si qui répond à vos besoins.
Il suffit d'écrire
tool.Click += Item_Click;
Edit: à Partir de MSDN "les Événements ne peut être invoqué à partir de l'intérieur de la classe ou structure où ils (il) sont déclarées". Donc, ce que vous essayez de faire n'est pas possible. Pourriez-vous donner plus de détails sur vos besoins? Pourquoi voudriez-vous passer un événement comme un paramètre?
Votre question suggère que vous avez obtenu un certain nombre de mécanismes de mal:
Vous ne pouvez pas passer événements!
- Vous le plus probablement envie de passer une fonction en paramètre, donc l'appel de la méthode d'appel que d'autres de la méthode à un certain point. En termes techniques, c'est un délégué. Je suggère d'utiliser le déjà défini classe d'Action. Voici un exemple extrait de:
La bonne chose à ce sujet est que lors de l'appel de la fonction MyFunction vous pouvez déclarer le recours à l'aide de la syntaxe inline: