事件 事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其它的程序逻辑触发的。引发(触发)事件的对象叫做事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。 在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。这个媒介就是委托。 新建一个Windows窗体应用程序,接口上放置一个卷标,一个框架,框架上放置5个按钮。界面如下。各按钮Tag依次为0、1、2、3、4,给按钮添加单击事件,5个按钮的单击事件处理函数均为button1_Click。 //挡位元元元元模拟案例演示如何通过委托来定义事件。 //Form1.cs using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; namespace Exam2_13 { public class Form1 : System.Windows.Forms.Form { //窗体设计器自动生成的代码略 static void Main() { Application.Run(new Form1()); } private void button1_Click(object sender, System.EventArgs e) { Break b=new Break();//建立文件类实例 b.ChangeBreak+=new BreakHandler(b_ChangeBreak);//事件挂接 BreakArgs ee=new BreakArgs();//新建BreakArgs实例,并传入文件为数值 ee.Level=Convert.ToInt32(((Button)sender).Tag); b.OnChangeBreak(sender,ee);//引发事件 } private void b_ChangeBreak(object sender,BreakArgs e) { switch(e.Level) { case 0: label1.Text="您启动了汽车,时速10"; break; case 1: label1.Text="当前檔位:1檔,时速20"; break; case 2: label1.Text="当前檔位:2檔,时速40"; break; case 3: label1.Text="当前檔位:3檔,时速80"; break; case 4: label1.Text="当前檔位:倒檔,时速-5"; break; } } } public delegate void BreakHandler(object sender,BreakArgs e); //建立能够传递檔位数值的参数类型 public class BreakArgs:EventArgs { private int i; public int Level { get{ return i;} set{ i=value;} } } //建立一个类,该类声明了一个事件 public class Break { public event BreakHandler ChangeBreak; public void OnChangeBreak(object sender,BreakArgs e) { if(ChangeBreak!=null) { ChangeBreak(sender,e); } } } } 结果分析:

评论