9
votes

Notifier lorsque l'événement d'une autre classe est déclenché

J'ai xxx

class A a une instance de classe B.

Comment cela peut-il être fait?


0 commentaires

3 Réponses :



63
votes

Vous devrez déclarer un événement public sur la classe 'B' - et avoir la classe 'A' S'abonner à celui-ci:

Quelque chose comme ceci: p>

class B
{
    //A public event for listeners to subscribe to
    public event EventHandler SomethingHappened;

    private void Button_Click(object o, EventArgs s)
    {
        //Fire the event - notifying all subscribers
        if(SomethingHappened != null)
            SomethingHappened(this, null);
    }
....

class A
{
    //Where B is used - subscribe to it's public event
    public A()
    {
        B objectToSubscribeTo = new B();
        objectToSubscribeTo.SomethingHappened += HandleSomethingHappening;
    }

    public void HandleSomethingHappening(object sender, EventArgs e)
    {
        //Do something here
    }

....


2 commentaires

Dunno pourquoi il est si difficile de rechercher un exemple d'événement C # aussi clair et simple que celui-ci à, juste pour communiquer deux classes? Après les heures de recherche enfin ... Je veux pleurer, merci beaucoup.


@Konayuki: ne pourrait pas être plus d'accord. Je cherchais un exemple simple de cela, et c'est ça. (AT) Davebi: Bon travail - Simple et efficace.



7
votes

Vous avez besoin de trois choses (qui est marquée par des commentaires dans le code):

  1. déclarer événement en classe B
  2. soulever un événement en classe B lorsque quelque chose s'est passé (dans votre cas - Button_Click Manutier d'événement exécuté). N'oubliez pas que vous devez vérifier s'il existe des abonnés. Sinon, vous obtiendrez NullReferenceException sur l'événement d'élévation.
  3. S'abonner à l'événement de la classe B. Vous devez avoir une instance de classe B, laquelle même vous souhaitez vous abonner (une autre option - événements statiques, mais ces événements seront soulevés par toutes les instances de la classe B).

    code: xxx


0 commentaires