事件有很多,比如说鼠标的事件:MouserMove,MouserDown等,键盘的事件:KeyUp,KeyDown,KeyPress。
有事件,就会有对事件进行处理的方法,而事件和处理方法之间是怎么联系起来的呢?委托就是他们中间的桥梁,事件发生时,委托会知道,然后将事件传递给处理方法,处理方法进行相应处理。
比如在WinForm中最常见的是按钮的Click事件,它是这样委托的:this.button1.Click += new System.EventHandler(this.button1_Click);按按钮后就会出发button1_Click方法进行处理。EventHandler就是系统类库里已经声明的一个委托。
EventHandler以及其它自定义的事件委托都是一类特殊的委托,他们有相同的形式:
delegate void 事件委托名(object sender,EventArgs e);
object用来传递事件的发生者,比如二中的Button控件就是一个事件发生者;EventArgs用来传递事件的细节。
示例:
using System;
namespace EventDemo
{
///
/// Summary description for Class1.
///
class EventReceiver
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string[] args)
{
EventSender c1 = new EventSender();
//委托实例化后绑定到事件
c1.OnUserRequest += new UserRequest(c1_OnUserRequest);
c1.Run();
}
private static void c1_OnUserRequest(object sender, EventArgs e)
{ //事件处理方法
Console.WriteLine(" 你触发了事件!");
}
}
//定义委托
public delegate void UserRequest(object sender,EventArgs e);
///
/// 事件发送类
///
public class EventSender
{
public EventSender()
{
}
//定义一个委托类型的事件
public event UserRequest OnUserRequest;
public void Run()
{
while(true)
{
if(Console.ReadLine() == "a")
{
//事件监听,产生事件
OnUserRequest(this,new EventArgs());
}
}
}
}
}
带事件数据的事件示例:
using System;
namespace EventDemo
{
///
/// Summary description for Class1.
///
class EventReceiver
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string[] args)
{
EventSender c1 = new EventSender();
//委托实例化后绑定到事件
c1.OnUserRequest += new UserRequest(c1_OnUserRequest);
c1.Run();
}
private static void c1_OnUserRequest(object sender, OnUserRequestEventArgs e)
{ //事件处理方法
Console.WriteLine("你触发了事件"+e.InputText);
}
}
//定义委托
public delegate void UserRequest(object sender,OnUserRequestEventArgs e);
///
/// 带事件数据的事件类,从EventArgs继承
///
public class OnUserRequestEventArgs : System.EventArgs
{
private string _InputText;
public string InputText
{
get
{
return _InputText;
}
set
{
_InputText = value;
}
}
}
///
/// 事件发送类
///
public class EventSender
{
public EventSender()
{
}
//定义一个委托类型的事件
public event UserRequest OnUserRequest;
public void Run()
{
while(true)
{
if(Console.ReadLine() == "a")
{
//事件监听,产生事件
OnUserRequestEventArgs e = new OnUserRequestEventArgs();
e.InputText = "a";
OnUserRequest(this,e);
}
}
}
}
}