【问题标题】:What is the correct way to make an inherited event-handler fire before its base’s event-handler?使继承的事件处理程序在其基的事件处理程序之前触发的正确方法是什么?
【发布时间】:2011-10-10 15:16:21
【问题描述】:

我有一个基类(本身继承自 Panel)和一个继承类。基类有一个 Click 事件处理程序。

使继承类中的 Click 事件处理程序基的处理程序之前触发,然后才执行基的处理程序的正确方法是什么?

我的解决方法是以下形式:

class first : Panel
{
    public first()
    {
        Click += first_Click;
    }

    protected virtual void first_Click(object sender, EventArgs e)
    {
        doHandler();
    }

    protected void doHandler()
    {
        MessageBox.Show("first");
    }
}

class derived : first
{
    protected override void first_Click(object sender, EventArgs e)
    {
        MessageBox.Show("derived");
        doHandler();
    }
}

有没有直接的方法?

谢谢。

【问题讨论】:

    标签: c# winforms inheritance event-handling


    【解决方案1】:

    监听你自己的事件是没有意义的。改用 OnClick() 方法。

    class derived : first
    {
        protected override void OnClick(EventArgs e)
        {
            MessageBox.Show("derived");
            base.OnClick(e);
        }
    }
    

    或者先调用 base.OnClick() 来改变顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多