2009-06-19 7 views
2

J'ai un peu de mal à m'abonner à un événement que j'ai créé. L'événement lui-même est dans sa propre classe et je veux pouvoir m'inscrire à partir d'une classe séparée dans un projet séparé. Je suis capable de m'abonner à la classe dans laquelle elle est créée - mais quand j'essaie de m'abonner à une classe différente dans un projet différent, rien ne se passe.Abonnement aux événements d'une classe distincte

Est-ce que quelqu'un pourrait me donner quelques conseils sur la façon dont je peux y arriver? Je suis allé partout dans Google en essayant de trouver une solution, mais sans résultat :(

+0

Souhaitez-vous s'il vous plaît poster une partie de votre code? –

+1

Question évidente d'abord: L'événement est-il public? –

Répondre

6

Voici un exemple simple d'un événement que j'ai créé et souscrit à:.

using System; 

class Program 
{ 
    static void Main() 
    { 
     Foo foo = new Foo(); 
     foo.Fooing +=() => Console.WriteLine("Foo foo'd"); 

     foo.PleaseRaiseFoo(); 
    } 
} 

class Foo 
{ 
    public event Action Fooing; 

    protected void OnFooing() 
    { 
     if (this.Fooing != null) 
      this.Fooing(); 
    } 

    public void PleaseRaiseFoo() 
    { 
     this.OnFooing(); 
    } 
} 

Espérons que cela devrait être en mesure pour vous diriger dans la bonne direction les principales choses à vérifier dans votre code.?

  • Est-ce votre événement marqué comme public pour
  • -vous soulevez jamais l'événement (par exemple this.Fooing())
  • ?
0

Avez-vous essayé?

MyInstanceOfMyClass.MyEvent += new EventHandler(MyDelegate); 
protected void MyDelegate(object sender, EventArgs e) { ... } 
1

Je viens d'essayer votre exemple de code avec un délégué EventHandler au lieu d'action (puisque je ne pouvais pas trouver un délégué d'action non-générique dans l'espace de noms System)

Le code ci-dessous fonctionne comme vous » d attend: Il sort "Foo foo'd".

Peut-être que c'est le délégué de l'action, même si je trouve cela un peu bizarre.

class Program 
{ 
    static void Main() 
    { 
     Foo foo = new Foo(); 
     foo.Fooing += (object o, EventArgs e) => Console.WriteLine("Foo foo'd"); 

     foo.PleaseRaiseFoo(); 
    } 
} 

class Foo 
{ 
    public event EventHandler Fooing; 

    protected void OnFooing() 
    { 
     if (this.Fooing != null) 
      this.Fooing(null, null); 
    } 

    public void PleaseRaiseFoo() 
    { 
     this.OnFooing(); 
    } 
} 
+1

L'exemple de code a été posté par Andrew, pas le PO. Le code d'Andrews devrait fonctionner tel quel. – Brandon

+0

Oh mon Dieu, je suis terriblement désolé - ne voulait pas voler la réponse :-( – Steffen

0

Vous avez noté que votre classe est dans un projet différent, pouvez-vous voir la classe d'événements (ou toute autre classe dans ce projet)? Peut-être n'avez-vous pas correctement référencé votre autre projet.

Questions connexes