走进C#基础概念之事件

事件,是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. //定义事件        
  2.  public event EventHandler myevnet; 

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

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

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

 
 
 
  1. ///         
  2. /// 事件的处理     
  3.    ///         
  4. ///         
  5. ///        
  6.  private void MyEventHandler(object sender, EventArgs e)        
  7. {             
  8. essageBox.Show("myevent is raised.......");     
  9.    } 

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

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

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

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

 
 
 
  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.       }  
  30.   } 

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

首先要自定义一个事件消息类,这个类继承于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() {
  18.  Message = this.textBox1.Text });  
  19.           }  
  20.       }  
  21.   }  
  22. ///自定义事件消息类  
  23.     public class MyEventArgs : EventArgs  
  24.    {  
  25.       public string Message { set; get; }  
  26.    } 

事件监听者方面:

事件监听

 
 
 
  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.        }  
  19.       } 

原文链接:http://www.cnblogs.com/yangyancheng/archive/2011/04/24/2026240.html

分享文章:走进C#基础概念之事件
网页地址:http://www.shufengxianlan.com/qtweb/news5/147805.html

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

广告

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