庖丁解牛Asp.net3.5控件和组件开发技术系列—事件和数据回发机制(二)
public KingTextBoxUseEvents() { } /// <summary> /// 设置或获取显示文本 /// </summary> public string Text { get { String s = (String)ViewState["Text"]; return ((s == null) ? String.Empty : s); } set { ViewState["Text"] = value; } } /// <summary> /// 生成呈现HTML格式标记 /// </summary> /// <param name="writer"></param> protected override void Render(HtmlTextWriter writer) { StringBuilder sb = new StringBuilder(); sb.Append("<input type=\"text\" name="); sb.Append("\"" + UniqueID + "\""); sb.Append(" value="); sb.Append("\"" + HttpUtility.HtmlEncode(Text) + "\""); sb.Append(" />"); writer.Write(sb.ToString()); } public virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection) { string strOldValue = Text; string strNewValue = postCollection[this.UniqueID]; if( strOldValue == null || ( strOldValue != null && !strOldValue.Equals (strNewValue))) { this.Text = strNewValue; return true; } return false; } public virtual void RaisePostDataChangedEvent() { OnTextChanged(EventArgs.Empty); } //高效事件 private static readonly object TextChangedKeyObject = new object(); public event EventHandler TextChanged { add { base.Events.AddHandler(KingTextBoxUseEvents.TextChangedKeyObject, value); } remove { base.Events.RemoveHandler(KingTextBoxUseEvents.TextChanged KeyObject, value); } } protected virtual void OnTextChanged(EventArgs e) { EventHandler handler =base.Events[KingTextBoxUseEvents.TextChanged KeyObject] as EventHandler; if (handler != null) { handler(this, e); } } } KingTextBoxUseEvents控件与KingTextBox功能完全相同,应用方法也相同。另外,事件的委托和参数对象也可以自定义,下一节就讲一下如何定制自己的委托和事件对象。 5.3.2 定制自己的委托和事件参数类 一般在实际开发中,对于事件不需要传递数据信息时,像上面的KingTextBox控件的事件,在引发事件时传递的参数为EventArgs.Empty,如下所示: 这是因为控件KingTextBox的TextChanged事件比较简单,这里不需要参数对象传递数据。但像一些复杂的控件比如GridView的按钮命令事件,必须得有参数命令表示单击了哪个按钮;翻页事件,需要EventArgs参数对象把当前页信息传递到页面后台代码的事件体的第二个参数中,然后开发人员根据此页参数从数据库取得对应页的数据;还有像ItemDataBound事 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |