C#事件-自定义事件

事件有很多,比如说
鼠标的事件:MouserMove,MouserDown等。
键盘的事件:KeyUp,KeyDown,KeyPress。

有事件,就会有对事件进行处理的方法,而事件和处理方法之间是怎么联系起来的呢?委托就是他们中间的桥梁,事件发生时,委托会知道,然后将事件传递给处理方法,处理方法进行相应处理。

比如在WinForm中最常见的是按钮的Click事件,它是这样委托的:this.button1.Click += new System.EventHandler(this.button1_Click);按按钮后就会出发button1_Click方法进行处理。EventHandler就是系统类库里已经声明的一个委托。-------委托实例化,this.buttion1_click为方法名

EventHandler以及其它自定义的事件委托都是一类特殊的委托,他们有相同的形式:

delegate void 事件委托名(object sender,EventArgs e);

object用来传递事件的发生者,比如Button控件就是一个事件发生者;EventArgs用来传递事件的细节。

我们看下面的例子:
using System;

namespace 最简单的自定义事件
{
     /// <summary>
     /// 事件发送类
     /// </summary>
     class Class1
     {
         public delegate void UserRequest(object sender,EventArgs e); //定义委托
         public event UserRequest OnUserRequest; //定义一个委托类型的事件

         public void run()
         {
             while(true)
             {
                 if(Console.ReadLine()=="a")
                 {//事件监听
                     OnUserRequest(this,new EventArgs()); //产生事件
                 }
             }
         }
     }

     /// <summary>
     /// 事件接收类
     /// </summary>
     class Class2
     {
         static void Main(string[] args)
         {
             Class1 c1 = new Class1();
             c1.OnUserRequest += new Class1.UserRequest(c1_OnUserRequest); //委托实例化后绑定到事件
             c1.run();
         }

         private static void c1_OnUserRequest(object sender, EventArgs e)
         {//事件处理方法
             Console.WriteLine("\t你触发了事件!");
         }
     }
}

posted on 2012-06-28 07:38  流星落  阅读(291)  评论(0编辑  收藏  举报

导航