一、 认识委托
二、事件委托
好,现在我们对委托有一定的了解了,现在开始事件委托的历程,例如:有一个按钮
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);//真正调用外部指派的处理函数.
}
}
输出结果: