快速业务通道

庖丁解牛Asp.net3.5控件和组件开发技术系列—事件和数据回发机制(一)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
控件的Text属性,并返回true,让页框架自动调用数据回发事件方法 RaisePostDataChangedEvent,使控件具有调用文本框值变化事件的机会;否则,如果新旧值相同,则不必修改控件Text属性值,直接返回false,通知页框架不调用RaisePostDataChangedEvent方法。

接下来,RaisePostDataChangedEvent事件的实现代码如下:

public virtual void RaisePostDataChangedEvent()
{
   OnTextChanged(EventArgs.Empty);
}

该方法在LoadPostData方法之后执行,如果上面的LoadPostData方法返回值为true,则页框架会调用本方法,方法体中仅有一句代码,即调用OnTextChanged方法。此方法代码如下:

public event EventHandler TextChanged;
protected virtual void OnTextChanged(EventArgs e)
{
   if (TextChanged != null)
   {
     TextChanged(this, e);
   }
}

此方法体中判断开发人员在页面使用KingTextBox时是否注册了TextChanged 事件,如果注册了就调用开发人员的事件逻辑。委托和事件在本章开始的5.1.1节已经对其原理和用法作了说明,这里就不再多说。

完善一下控件,由于控件仅有一个属性,也仅有一个事件,可以设置控件的类元数据属性,指定默认属性和默认事件,设置好后的代码如下:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
[DefaultProperty("Text")]
[DefaultEvent("TextChanged")]
[ToolboxData("<{0}:KingTextBox runat=server></{0}:KingTextBox>")]
public class KingTextBox : Control, IPostBackDataHandler
{
   //… …
}

另外,为了使控件保留扩展性。以上这些方法LoadPostData,RaisePostDataChangedEvent和 OnTextChanged都通过关键字virtual设置成了虚方法,并且至少设置成protected,这样就可以保证控件人员很容易从该控件继承,通过重载相应的方法来扩展现有控件功能,使控件具有很好的扩展性。对于扩展控件功能,后面会有专门介绍扩展GridView控件的章节。

到现在为止KingTextBox已经完成了。对于此控件笔者专门作了个测试其功能的页面例子,如图5-3所示。

图5-3 测试King TextBox功能的页面

页面上左边放置一个KingTextBox,右边放置一个标准的ASP.NET TextBox。下面是两个按钮,功能是完成把值复制给对方,并清空自己的值。下面的Label是提示是否执行了KingTextBox的事件。

上面设计器对应的源代码如下:

<table style="width: 260px">
   <tr>
     <td style="width: 75px">
       King TextBox</td>
     <td style="width: 3px">
       Asp.NET TextBox
     </td>
   </tr>
   <tr>
     <td style="width: 75px; height: 21px">
       <cc1:KingTextBox ID="KingTextBox1" runat="server" OnTextChanged=
          "KingTextBox_TextChanged">
       </cc1:KingTextBox> </td>
     <td style="width: 3px; height: 21px;">
       <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
   </tr>
   <tr>
     <td colspan= 1>
       <asp:Button ID="btnCopy" runat="server" Text="Copy>>>&q

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号