事件的委托(转自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
一个简单的例子:
张三看到餐桌上有一个桔子,由于自己怕动(主要是出于自己要玩游戏,走不开),立刻就对着他妈妈喊:“我要吃桔子,妈妈帮我拿过来。”,接着,他妈妈听到乖儿子要吃桔子,就立刻送去给儿子了。
从某种意义上来说,把儿子发出消息要桔子的动作与妈妈送桔子给儿子的动作相关联的过程就称为委托,也就是说儿子发出消息要桔子这个事件委派妈妈根据他的消息内容去完成他想要做的事。
二、事件委托
好,现在我们对委托有一定的了解了,现在开始事件委托的历程,例如:有一个按钮
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
相关文章推荐
- .NET 中的 委托与事件
- Delegate 和 Event (委托和事件) 推荐
- C#中委托和事件的区别实例解析
- 应用框架的设计与实现——.NET平台(7.事件通知服务.委托.异步编程)
- 委托和事件
- C# delegate委托及事件
- 委托和事件
- 委托和事件的一点总结
- c#的委托和事件
- C# 中的委托和事件+匿名方法函数
- (每日心得)关于C#中委托和事件的一些认识(三)
- 委托和事件
- C#通过委托调用Button单击事件的方法
- C# 中的委托和事件
- 委托与事件——我的第一篇博客
- C#中的委托和事件
- .NET基础拾遗(4)委托和事件2
- js 事件代理(事件委托)
- C#中委托和事件在观察者模式中的应用实例
- 委托与事件