10

私は持っています

class A
{
    B b;

    //call this Method when b.Button_click or b.someMethod is launched
    private void MyMethod()
    {            
    }

    ??
}

Class B
{
    //here i.e. a button is pressed and in Class A 
    //i want to call also MyMethod() in Class A after the button is pressed 
    private void Button_Click(object o, EventArgs s)
    {
         SomeMethod();
    }

    public void SomeMethod()
    {           
    }

    ??
}

クラスAにはクラスBのインスタンスがあります。

これはどのように行うことができますか?

4

3 に答える 3

64

クラス 'B' でパブリック イベントを宣言し、クラス 'A' をサブスクライブする必要があります。

このようなもの:

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
    }

....
于 2012-12-13T09:40:49.680 に答える
8

次の 3 つが必要です (コード内のコメントでマークされています)。

  1. クラス B でイベントを宣言する
  2. 何かが起こったときにクラスBでイベントを発生させます(あなたの場合-Button_Clickイベントハンドラーが実行されました)。サブスクライバーが存在するかどうかを確認する必要があることに注意してください。そうしないと、イベントの発生時に NullReferenceException が発生します。
  3. クラス B のイベントをサブスクライブします。サブスクライブするクラス B のインスタンスが必要です (別のオプション - 静的イベントですが、これらのイベントはクラス B のすべてのインスタンスによって発生します)。

コード:

class A
{
    B b;

    public A(B b)
    {
        this.b = b;
        // subscribe to event
        b.SomethingHappened += MyMethod;
    }

    private void MyMethod() { }
}

class B
{
    // declare event
    public event Action SomethingHappened;

    private void Button_Click(object o, EventArgs s)
    {
         // raise event
         if (SomethingHappened != null)
             SomethingHappened();

         SomeMethod();
    }

    public void SomeMethod() { }
}
于 2012-12-13T09:41:16.710 に答える
-1

クラスBからのイベントの発生をご覧ください

見て

イベントを開催する

イベントの処理と発生

方法:イベントを発生させて消費する

于 2012-12-13T09:36:32.113 に答える