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

您可以使用 A 类公开并由 B 类使用的事件,就像我们使用 Button 类一样。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 回答