事件
事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其它的程序逻辑触发的。引发(触发)事件的对象叫做事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。
在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。这个媒介就是委托。
新建一个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
{
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);
}
}
}
}
结果分析:
评论