想向大家请教一个问题:C#中的事件处理机制是怎样的?(在线等候)
我用VS.net创建了一个标准的windows窗口程序,加入两个自定义控件:MyRichTextBox和MyTextBox
主要代码如下:(代码有些长,但结构很简单,希望大家能耐心看完)
public class MyRichTextBox : System.Windows.Forms.RichTextBox
{
public event EventHandler MyDoubleClick;
protected override void OnDoubleClick(EventArgs e)
{
if(MyDoubleClick != null)
{
MyDoubleClick(this, e);
}
}
}
public class MyTextBox : System.Windows.Forms.TextBox
{
public event EventHandler MyDoubleClick;
protected override void OnDoubleClick(EventArgs e)
{
if(MyDoubleClick != null)
{
MyDoubleClick(this, e);
}
}
}
public class MainForm : System.Windows.Forms.Form
{
private MyRichTextBox myRichTextBox;
private MyTextBox myTextBox;
...
private void InitializeComponent()
{
...
myRichTextBox.MyDoubleClick +=
new EventHandlerMyControl_MyDoubleClick);
myTextBox.MyDoubleClick +=
new EventHandler(MyControl_MyDoubleClick);
...
}
...
private void MyControl_MyDoubleClick(object sender, EventArgs e)
{
this.Text = "MyDoubleClick";
}
}
结果发现两个问题:
1.自定义的myTextBox可以执行DoubleClick事件,但myRichTextBox却不行。
2.将OnDoubleClick方法的修饰符override改为new,这时myTextBox也无法响应DoubleClick事件了。
想请大家帮我分析一下上面的问题,也想和大家探讨一下C#中事件的处理过程。