事件,是C#编程模型中重要的一个概念,通过对事件的理解,可以更好的了解C#程序运行机制。C#中的事件,可以简单的理解为类或者对象发生了一件事,并且把这件事通知给了其他的类或者对象,其他的类或者对象可以根据事件的消息有所反应。这非常类似设计模式中的观察者模式。
引发事件的类或对象,可以称之为事件源,注册并对处理事件的类或者对象可以称为事件订阅者或者事件监听者,我比较喜欢称之为事件监听者。
比如:构建一个winform应用,在窗体Form1简单放置一个按钮控件,然后,双击按钮,则可以进入代码视图中按钮click事件处理程序。
- private void button1_Click(object sender, EventArgs e)
- {
-
- }
这时,还可以打开Form1.designer.cs,还可以找到如下代码:
- this.button1.Click += new System.EventHandler(this.button1_Click);
这行代码表明,当前窗体注册了click事件(click就是Button对象的一个事件),并且用 button1_Click方法进行了处理。EventHandler是一个委托,关于委托可参见我的上一篇文章C#基础概念之委托。
以上是对C#事件的一些简单的解释。当然,我们也可以自定义事件。
自定义事件,分为如下几步:
第一步:首先在事件源对象定义事件
第二步:在事件监听者,订阅事件
第三步:在事件监听者,编写事件处理代码:
-
-
-
-
-
- private void MyEventHandler(object sender, EventArgs e)
- {
- MessageBox.Show("myevent is raised.......");
- }
第四步:在事件源对象引发事件
这仅是个演示,供各位参考,下面给出完整代码,方便测试
简单自定义事件,完整代码:
- public partial class Form1 : Form
- {
-
- public event EventHandler myevnet;
- public Form1()
- {
- InitializeComponent();
-
- this.myevnet+=new EventHandler(MyEventHandler);
- }
- private void button1_Click(object sender, EventArgs e)
- {
- MessageBox.Show("button1_Click");
-
- if (myevnet != null)
- {
-
- myevnet(this.button1, new EventArgs());
- }
- }
-
-
-
-
-
- private void MyEventHandler(object sender, EventArgs e)
- {
- MessageBox.Show("myevent is raised.......");
- }
- }
当然,真环境下,自定义事件要比这个复杂一些,下面再举一个例子,在事件引发时,传递自定义的消息。
首先要自定义一个事件消息类,这个类继承于EventArgs
然后自定义委托,来处理事件。完整代码如下:
事件源方面:
-
- public delegate void MyeventHandler(object sender, MyEventArgs e);
- public partial class AddGrade : Form
- {
-
- public event MyeventHandler myCustomevent;&nbs
来源:
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】
打赏
扫码打赏,您说多少就多少