惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
J
Java Code Geeks
The GitHub Blog
The GitHub Blog
博客园_首页
U
Unit 42
人人都是产品经理
人人都是产品经理
Engineering at Meta
Engineering at Meta
IT之家
IT之家
G
Google Developers Blog
L
LangChain Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
Jina AI
Jina AI
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
小众软件
小众软件
H
Help Net Security

博客园 - seyon

监控 SQL Server 的运行状况 [MSDN]Static,迭代器 [转]不用合并模块部署水晶报表 从vs2005升级到vs2008的理由 [水晶报表]打开报表失败 水晶报表检索COM类工厂中CLSID为{11BD5260-15B6-412D-80DB-12BB60B8FE50}的组件时失败解决办法 DB2连接方法 [转]WEB Service 下实现大数据量的传输 RegisterStartupScript和RegisterClientScriptBlock输出位置的区别 - seyon - 博客园 【转】SOA技术综览 【SQL2005 ReportingService特性与应用】笔记 【.NET和J2EE使用Web Services的互操作性】笔记 Hashtable的遍历 有用的VS技巧 Windows service安装项目 DataView操作后的结果集 自定义水晶报表工具条 【跟我一起学Visual Studio 2005(1):C#语法篇(上)】笔记 【跟我一起学Visual Studio 2005(19):Crystal Report篇之Web报表服务】笔记
自定义控件学习笔记(5):事件委托列表的使用
seyon · 2007-10-27 · via 博客园 - seyon

对于多个事件采用事件委托列表的方法比重复写委托,效率更高,占用内存更少

 [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!/>");
        }

    }