难得有一片天

success.aspx?para1="要有决心"+para2="要努力"+para3="要有机会"
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2007-10-27 17:49  seyon  阅读(750)  评论(2编辑  收藏  举报
对于多个事件采用事件委托列表的方法比重复写委托,效率更高,占用内存更少
 [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!/>");
        }

    }