您的位置:首页 > 其它

事件的委托(转自cnblogs)

2007-08-16 11:09 197 查看
一、 认识委托

一个简单的例子:

张三看到餐桌上有一个桔子,由于自己怕动(主要是出于自己要玩游戏,走不开),立刻就对着他妈妈喊:“我要吃桔子,妈妈帮我拿过来。”,接着,他妈妈听到乖儿子要吃桔子,就立刻送去给儿子了。
从某种意义上来说,把儿子发出消息要桔子的动作妈妈送桔子给儿子的动作相关联的过程就称为委托,也就是说儿子发出消息要桔子这个事件委派妈妈根据他的消息内容去完成他想要做的事。

二、事件委托
 好,现在我们对委托有一定的了解了,现在开始事件委托的历程,例如:有一个按钮
  
 Button –> 赋值 –> 引发ButtonTextChangeEvent –> 调用相应的处理程序

 private Button button;
public delegate void ButtonTextChangeEventHander(object sender, System.EventArgs e); //事件委托的声明。

protected void Page_Load(object sender, EventArgs e)
{

if (!Page.IsPostBack)
{

Show();//调用button触发的事件;
SetValues();//给按钮的Text附值

}

}
//调用button触发的事件;
public void Show()
{
button = new Button();

button.TxtChange += new ButtonTextChangeEventHander(button_TxtChange);

}

//给按钮的Text附值
public void SetValues()
{
string[] values = { "AAA", "BBB", "CCC", "DDD", "EEE" };
for (int i = 0; i < 5; i++)
{
//主要是让程序有个阻塞输出,可以停留一会儿,让你一次看个够J,对理解委托没什么意义。
Thread.Sleep(2000);
//进行赋值,从而引发事件而直接调用button_TxtChange事件处理函数。
button.Text = values[i];
}
}
  //按钮要触发的时间
private void button_TxtChange(object sender, System.EventArgs e)
{
Response.Write(" Button实例新值。其值为:" + ((Button)sender).Text);
}

//以下是对象的属性设计

public class Button
{
public event ButtonTextChangeEventHander TxtChange; //定义一个事件委托的引用,以备外部进行事件的绑定.
private string _Text;
public string Text
{
get { return _Text; }
set
{
_Text = value;

System.EventArgs e = new EventArgs(); //这里是事件的基类实例.

ChangeTxt(e); //调用事件处理函数.
}
}
private void ChangeTxt(System.EventArgs e)
{
if (TxtChange != null)
TxtChange(this, e);//真正调用外部指派的处理函数.
}
}

输出结果:

Button实例新值。其值为:AAA
Button实例新值。其值为:BBB
Button实例新值。其值为:CCC
Button实例新值。其值为:DDD
Button实例新值。其值为:EEE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: