庖丁解牛Asp.net3.5控件和组件开发技术系列—事件和数据回发机制(二)
TextBoxCanPostEvent,则__LASTFOCUS 隐藏控件域是共用的。
这一节内容就讲这么多。本节涉及一些客户端操作,包括控件开发Page类对脚本开发的支持。这里仅作了解即可,脚本开发在控件开发中远不只这些,后面还有专门的章节介绍。 5.3 复合控件的事件处理机制 复合控件处理起来比前面几节讲的原始控件(非复合控件)要简单,比较容易理解。 5.3.1 高效率事件集合对象 在之前讲的几个例子中,使用的是最普通的定义事件方法,比如KingTextBox中事件是这样定义的:
在复合控件中,事件一般比较多,如果仍然基于以上普通事件的实现方法来定义事件,就会定义许多事件委托实现对象,导致占用较多内存存储。 在这种情况下,则应该通过System.ComponentModel.EventHandlerList集合类来保存事件,原因是使用此类在多个事件的声明过程中比普通的实现方法效率高。EventHandlerList类提供一个简单的委托列表来添加(Events.AddHandler)和删除(Events.RemoveHandler)委托,在Control基类中已经定义好了EventHandlerList类型的对象Events,因此可以直接通过base.Events访问事件列表对象。 下面利用Events集合对象存储事件,修改一下KingTextBox控件的事件声明/调用部分,为了保留KingTextBox现有功能,新增一个控件示例,控件名称为KingTextBoxUseEvents。事件部分的代码为:
以上代码首先定义了一个Object对象TextChangedKeyObject,用于当存储事件到Events列表时,作为 TextChanged事件的Key,其对应Value为即为事件方法体。接下来定义了一个事件委托类型的TextChanged属性,其内容包括一个 add和一个remove子句,在这两个子句中分别完成注册和释放事件功能。最后的OnTextChanged方法也稍微变了一下,增加了从 base.Events事件列表中根据TextChangedKeyObject键得到事件句柄的代码语句,如果取得的句柄handler不为null,即可引发开发人员注册的事件。 控件KingTextBoxUseEvents代码也比较简单,下面也把它的完整代码展示出来:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |