如何将事件处理程序添加到继承的winform控件?

时间:2009-07-15 18:31:21

标签: winforms inheritance datagridview controls

我需要向继承的控件添加一个事件处理程序,如datagridview,但Visual Studio不允许我。是否有一种方法可以让继承的控件触发基本事件处理程序和继承的处理程序?在我指定的序列中?

2 个答案:

答案 0 :(得分:1)

WinForms中的事件通常具有相应的“On *”方法。只需调用该方法,它就会引发事件。例如,如果要引发“CellClick”,请调用“base.OnCellClick(new DataGridViewCellEventArgs(row,column))”。

答案 1 :(得分:1)

你的问题不清楚。假设您正在尝试在继承的控件中处理基类'事件,您可以覆盖On EventName 受保护的虚拟方法。在覆盖中,确保调用基本方法或不会触发事件。

对于System.Windows.Forms中每个控件中的每个事件,此方法都存在(AFAIK)。如果您继承的控件没有此虚方法,则可以在构造函数中订阅vent。

例如:

class MyButton : Button {
    //First way
    protected override void OnClick(EventArgs e) { 
        base.OnClick(e);    //Without this line, the event won't be fired
        //...
    }


    //Second way
    public MyButton() {
        base.Click += Base_Click;
    }

    void Base_Click(object sender, EventArgs e) {
        //...
    }
}

修改

如果您尝试引发基类'事件,可以调用这些On EventName 方法。

如果基类没有基类,唯一的方法是声明一个新事件,并从引发新事件的基类向原始事件添加一个处理程序。请注意,如果您有其他代码使用基类'事件,并且evnet不是virtual并且没有提升方法,那么您运气不好,除非您可以反编译基类并查找事件发生的地方。