2

クラス A に、いくつかのロジックを持つクリック イベント ハンドラーがあります。そして今、私はクラス B からクラス A のイベント ハンドラーにアクセスし、クラス B のイベント ハドラー ロジックが最初に起動し、その後にクラス A のイベント ハンドラーが続くようにロジックを実行したいと考えています。

例:

Class A
private void calculate_Click(object sender, System.EventArgs e)
{  this.MyMethod(); }

Class B
private void calculate_Click(object sender, System.EventArgs e)
{  // My new code.. (This should trigger first)  this.MyMethod(); }
4

2 に答える 2

3

Buttonクラスの場合と同様に、クラスAによって公開され、クラスBによって消費されるイベントを使用できます。Buttonはクリックイベントを公開し、フォームクラスでは、Buttonクラスによって公開されるクリックイベントをサブスクライブします。

ここで理解するためのこの簡単な例を見つけました

using System;
namespace wildert
{
    public class Metronome
    {
        public event TickHandler Tick;
        public EventArgs e = null;
        public delegate void TickHandler(Metronome m, EventArgs e);
        public void Start()
        {
           // while (true) //uncomment this line if you want event to fire repeatedly
            {
                System.Threading.Thread.Sleep(3000);
                if (Tick != null)
                {
                    Tick(this, e);
                }
            }
        }
    }
        public class Listener
        {
            public void Subscribe(Metronome m)
            {
                m.Tick += new Metronome.TickHandler(HeardIt);
            }
            private void HeardIt(Metronome m, EventArgs e)
            {
                System.Console.WriteLine("HEARD IT");
            }

        }
    class Test
    {
        static void Main()
        {
            Metronome m = new Metronome();
            Listener l = new Listener();
            l.Subscribe(m);
            m.Start();
        }
    }
}
于 2012-04-27T05:10:50.667 に答える
0

クラス B にはA instanceOfClassA、A のインスタンスで適切に初期化されたインスタンス メンバーがあると仮定します。

private void calculate_Click(object sender, System.EventArgs e) 
{
  // My new code.. (This should trigger first)  
  instanceOfClassA.MyMethod();
  // other code
}

A からクラス B を継承することも検討できます。

class B:A
{
   private void calculate_Click(object sender, System.EventArgs e) 
    {
      // My new code.. (This should trigger first)  
      this.MyMethod(); // will come from base class A implementation.
      // other code
    }
}
于 2012-04-27T05:04:41.737 に答える