引发事件的类或对象,可以称之为事件源,注册并对处理事件的类或者对象可以称为事件订阅者或者事件监听者,我比较喜欢称之为事件监听者。
比如:构建一个winform应用,在窗体Form1简单放置一个按钮控件,然后,双击按钮,则可以进入代码视图中按钮click事件处理程序。
private void button1_Click( object sender, EventArgs e) { /// sender即表示事件源,e表示通过事件传递过来的消息 }
这时,还可以打开Form1.designer.cs,还可以找到如下代码:
this .button1.Click += new System.EventHandler( this .button1_Click);
这行代码表明,当前窗体注册了click事件(click就是Button对象的一个事件),并且用 button1_Click方法进行了处理。EventHandler是一个委托,关于委托可参见我的上一篇文章C#基础概念之委托
以上是对C#事件的一些简单的解释。当然,我们也可以自定义事件。
自定义事件,分为如下几步:
第一步:首先在事件源对象定义事件
// 定义事件 public event EventHandler myevnet;
// 事件注册 this .myevnet += new EventHandler(MyEventHandler);
第三步:在事件监听者,编写事件处理代码:
/// <summary> /// 事件的处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MyEventHandler( object sender, EventArgs e) { MessageBox.Show( " myevent is raised....... " ); }
第四步:在事件源对象引发事件
// 判断事件是否被注册 if (myevnet != null ) { // 引发事件 myevnet( this .button1, new EventArgs()); }
这仅是个演示,供各位参考,下面给出完整代码,方便测试
简单自定义事件,完整代码
1 public partial class Form1 : Form 2 { 3 // 定义事件 4 public event EventHandler myevnet; 5 6 public Form1() 7 { 8 InitializeComponent(); 9 // 事件注册 10 this .myevnet += new EventHandler(MyEventHandler); 11 12 } 13 14 <SPAN style="COLOR: #000000" < dd>