C#基础概念之事件

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

君山网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站建设等网站项目制作,到程序开发,运营维护。成都创新互联于2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联

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

比如:构建一个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. ///    
  2. /// 事件的处理   
  3. ///    
  4. ///    
  5. ///    
  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. ///   
  22. /// 事件的处理  
  23. ///   
  24. ///   
  25. ///   
  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;   
  7. public AddGrade()   
  8. {   
  9. InitializeComponent();  
  10. }  
  11. private void button1_Click(object sender, EventArgs e)  
  12. {  
  13. //dosomthing  
  14. //事件引发  
  15. if (myCustomevent != null)  
  16. {  
  17. myCustomevent(this, new MyEventArgs() { Message = this.textBox1.Text });  
  18. }  
  19. }  
  20. }  
  21. ///自定义事件消息类  
  22. public class MyEventArgs : EventArgs  
  23. {  
  24. public string Message { set; get; }  

事件监听者方面:

 
 
 
  1. public partial class EventDemo : Form   
  2. {   
  3. public EventDemo()   
  4. {   
  5. InitializeComponent();   
  6. }  
  7. private void button1_Click(object sender, EventArgs e)  
  8. {  
  9. AddGrade addGrad = new AddGrade();  
  10. //注册事件  
  11. addGrad.myCustomevent += new MyeventHandler(addGrad_myCustomevent);  
  12. addGrad.Show();   
  13. }  
  14. void addGrad_myCustomevent(object sender, MyEventArgs e)  
  15. {  
  16. //dosomthing  
  17. MessageBox.Show(e.Message);  
  18. }  

【编辑推荐】

  1. 走进C#奇妙函数之ToLookup
  2. 浅谈C++调用C#的DLL程序方法
  3. C#选择正确的集合进行编码
  4. C#图片处理的3种高级实用方法

网站名称:C#基础概念之事件
本文URL:http://www.gawzjz.com/qtweb/news23/189323.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联