2009-07-15 67 views

回答

1

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

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

例如:

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) { 
     //... 
    } 
} 

编辑

如果你想养基类的事件,你可以调用这些在事件名称方法。

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

1

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

+0

+1,因为这是我正在寻找的答案。 – 2013-08-19 10:49:28

相关问题