您的位置:首页 > 其它

自定义控件学习笔记(5):事件委托列表的使用

2007-10-27 17:49 639 查看
对于多个事件采用事件委托列表的方法比重复写委托,效率更高,占用内存更少

[DefaultEvent("dbClick")]

[ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")]

//继承了IPostBackEventHandler接口,该接口只有一个方法RaisePostBackEvent(触发Post事件)

public class WebCustomControl1 : WebControl,IPostBackEventHandler

{

//创建一个事件对象,向事件委托列表中添加

private static readonly object Eventclick = new object();

private static readonly object Eventclick2 = new object();

//向委托列表添加事件委托,列表类似hashtable成对键值

[Description("事件属性结构"), Category("Action")]

public event EventHandler ccClick

{

add

{ Events.AddHandler(Eventclick, value); }

remove

{ Events.RemoveHandler(Eventclick, value); }

}

[Description("事件属性结构"), Category("Action")]

public event EventHandler ddClick

{

add

{ Events.AddHandler(Eventclick2, value); }

remove

{ Events.RemoveHandler(Eventclick2, value); }

}

//事件处理过程(事件内容)

protected virtual void dbClick(EventArgs e)

{

//从列表中取出委托,由于装箱的时候是object,所以拆箱的时候要转换类型

EventHandler clickHandler = (EventHandler)Events[Eventclick];

if (clickHandler != null)

{

clickHandler(this, e);

}

}

//事件处理过程(事件内容)

protected virtual void dbClick2(EventArgs e)

{

//从列表中取出委托,由于装箱的时候是object,所以拆箱的时候要转换类型

EventHandler clickHandler = (EventHandler)Events[Eventclick2];

if (clickHandler != null)

{

clickHandler(this, e);

}

}

public void RaisePostBackEvent(string eventArgument)

{

dbClick(EventArgs.Empty);

dbClick2(EventArgs.Empty);

}

protected override void RenderContents(HtmlTextWriter output)

{

output.Write("<input type=submit name="+this.UniqueID+" value=click me!/>");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: