如何访问另一个类中的事件处理程序

时间:2012-04-27 04:59:47

标签: c# winforms visual-studio-2010

我在A类中有一个带有一些逻辑的click事件处理程序。现在我想从类B访问A类事件处理程序并执行一些逻辑,以便首先触发B类事件hadler逻辑,然后触发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(); }

2 个答案:

答案 0 :(得分:2)

您可以像使用Button类一样使用由A类公开并由B类使用的事件。 Button公开了click事件,在我们的表单类中,我们订阅了Button类公开的click事件。

我找到了这个简单的例子来理解here

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();
        }
    }
}

答案 1 :(得分: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
    }
}