欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

C#基础概念之事件

创建时间:2011年06月12日 23:33  阅读次数:(4821)
分享到:

事件,是C#编程模型中重要的一个概念,通过对事件的理解,可以更好的了解C#程序运行机制。C#中的事件,可以简单的理解为类或者对象发生了一件事,并且把这件事通知给了其他的类或者对象,其他的类或者对象可以根据事件的消息有所反应。这非常类似设计模式中的观察者模式。

引发事件的类或对象,可以称之为事件源,注册并对处理事件的类或者对象可以称为事件订阅者或者事件监听者,我比较喜欢称之为事件监听者。

比如:构建一个winform应用,在窗体Form1简单放置一个按钮控件,然后,双击按钮,则可以进入代码视图中按钮click事件处理程序。

  1. private void button1_Click(object sender, EventArgs e)   
  2. {   
  3. ///sender即表示事件源,e表示通过事件传递过来的消息   
  4. }  

这时,还可以打开Form1.designer.cs,还可以找到如下代码:

  1. this.button1.Click += new System.EventHandler(this.button1_Click); 

这行代码表明,当前窗体注册了click事件(click就是Button对象的一个事件),并且用 button1_Click方法进行了处理。EventHandler是一个委托,关于委托可参见我的上一篇文章C#基础概念之委托。

以上是对C#事件的一些简单的解释。当然,我们也可以自定义事件。

自定义事件,分为如下几步:

第一步:首先在事件源对象定义事件

  1. //定义事件 public event EventHandler myevnet; 

第二步:在事件监听者,订阅事件  

  1. //事件注册 this.myevnet+=new EventHandler(MyEventHandler);  

第三步:在事件监听者,编写事件处理代码:

  1. /// <summary>   
  2. /// 事件的处理   
  3. /// </summary>   
  4. /// <param name="sender"></param>   
  5. /// <param name="e"></param>   
  6. private void MyEventHandler(object sender, EventArgs e)   
  7. {   
  8. MessageBox.Show("myevent is raised.......");   

第四步:在事件源对象引发事件

  1. //判断事件是否被注册  
  2.  if (myevnet != null)   
  3. {   
  4. //引发事件 myevnet(this.button1, new EventArgs());   
  5. }  

这仅是个演示,供各位参考,下面给出完整代码,方便测试

简单自定义事件,完整代码:

  1. public partial class Form1 : Form   
  2. {   
  3. //定义事件   
  4. public event EventHandler myevnet;   
  5. public Form1()   
  6. {   
  7. InitializeComponent();   
  8. //事件注册  
  9. this.myevnet+=new EventHandler(MyEventHandler);  
  10. }  
  11. private void button1_Click(object sender, EventArgs e)  
  12. {  
  13. MessageBox.Show("button1_Click");  
  14. //判断事件是否被注册  
  15. if (myevnet != null)  
  16. {  
  17. //引发事件  
  18. myevnet(this.button1, new EventArgs());  
  19. }  
  20. }  
  21. /// <summary>  
  22. /// 事件的处理  
  23. /// </summary>  
  24. /// <param name="sender"></param>  
  25. /// <param name="e"></param>  
  26. private void MyEventHandler(object sender, EventArgs e)  
  27. {  
  28. MessageBox.Show("myevent is raised.......");  
  29. }  

当然,真环境下,自定义事件要比这个复杂一些,下面再举一个例子,在事件引发时,传递自定义的消息。

首先要自定义一个事件消息类,这个类继承于EventArgs

然后自定义委托,来处理事件。完整代码如下:

事件源方面:

  1. ///自定义事件委托   
  2. public delegate void MyeventHandler(object sender, MyEventArgs e);   
  3. public partial class AddGrade : Form   
  4. {   
  5. //声明事件   
  6. public event MyeventHandler myCustomevent;&nbs
来源:
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 55+32=? 的结果(结果是:87)
结  果: