用动态控件模拟复合控件(一)
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute); context.PostRequestHandlerExecute += new EventHandler(context_PostRequestHandlerExecute); } void context_PostRequestHandlerExecute(object sender, EventArgs e) { //页面执行结束,清理 BaseTextBoxContext.Current.RemoveContext(); } void context_PreRequestHandlerExecute(object sender, EventArgs e) { Page page = HttpContext.Current.CurrentHandler as Page; if (page != null) { //注册页面的PreInit和PreRender事件 page.PreInit += new EventHandler(Page_PreInit); page.PreRenderComplete += new EventHandler(page_PreRenderComplete); } } void page_PreRenderComplete(object sender, EventArgs e) { try { List<EventHandler> list = new List<EventHandler>(BaseTextBoxContext.Current.PreRenderHandlers); foreach (EventHandler handler in list) { //执行控件要求要PreRender时的事件函数 handler.Invoke(sender, e); } } finally { BaseTextBoxContext.Current.PreRenderHandlers.Clear(); } } void Page_PreInit(object sender, EventArgs e) { try { List<EventHandler> list = new List<EventHandler>(BaseTextBoxContext.Current.PreInitHandlers); foreach (EventHandler handler in list) { //执行控件要求要PreInit时的事件函数 handler.Invoke(sender, e); } } finally { BaseTextBoxContext.Current.PreInitHandlers.Clear(); } } #endregion } 现在第一个问题和第二个问题的一部分解决了。为了在Page.PreInit之前,让用户控件自己把自己的事件添加到BaseTextBoxContext中,我在BaseTextBox的构造函数中,调用 BaseTextBox 构造
把自己要在Page.PreInit中执行的函数添加进去。在控件的Page_PreInit时, 我们要添加动态控件,还可以把自己放在另一个动态控件的内部哟,比如把TextBox放在Panel中,生成类似:
下面是我的实现: BaseTextBox [Flags] |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |