商务合作:179001057@qq.com

Asp.net 2.0 制作最原始的TextBox控件[一](示例代码下载)

技术2022-05-11  0


某平台价值19860元的编程课程资料免费领取【点我领取】


(一). 概述          示例制作一个与Asp.net TextBox同样功能的 TextBox control, 可以了解一下         Control底层的实现原理 (二). 代码实现       1. 核心控件生成代码文件TextBox.cs  1   1 using  System;  2   2 using  System.Data;  3   3 using  System.Configuration;  4   4 using  System.Web;  5   5 using  System.Web.Security;  6   6 using  System.Web.UI;  7   7 using  System.Web.UI.WebControls;  8   8 using  System.Web.UI.WebControls.WebParts;  9   9 using  System.Web.UI.HtmlControls; 10  10 11  11 using  System.Text; 12  12 using  System.Collections.Specialized; 13  13 14  14 namespace  KingControls 15  15 { 16  16      /**/ ///   17 17    /// Making a TextBox WebControl     18 18    ///  19  19      public   class  TextBox : Control, IPostBackDataHandler   // IPostBackDataHandler: 处理回发数据使用 20  20     { 21  21          public  TextBox() 22  22         { 23  23         } 24  24 25  25          /**/ ///   26 26        /// 设置或获取显示文本27 27        ///           28  28          public   string  Text 29  29         { 30  30              // Web编程中要用ViewState为两次回发共享数据 31  31              get 32  32             { 33  33                 String s  =  (String)ViewState[ " Text " ];  34  34                  return  ((s  ==   null ?  String.Empty : s); 35  35             } 36  36 37  37              set 38  38             { 39  39                 ViewState[ " Text " =  value; 40  40             } 41  41         } 42  42 43  43          /**/ ///   44 44        /// 生成呈现Html格式标记45 45        ///  46  46          ///   47  47          protected   override   void  Render(HtmlTextWriter writer) 48  48         { 49  49             StringBuilder sb  =   new  StringBuilder(); 50  50             sb.Append( " " text/ "  name= " ); 51  51             sb.Append( " / ""  + UniqueID +  " / "" );  // 标识符,继承自基类Control 52  52             sb.Append( " value= " ); 53  53 54  54              // HttpUtility.HtmlEncode 将用户输入字串转换成Html格式,主要转义用户输入的html关键字为非html关键字字符 55  55             sb.Append( " / ""  + HttpUtility.HtmlEncode(Text) +  " / "" ); 56  56             sb.Append( "  /> " ); 57  57             writer.Write(sb.ToString()); 58  58         } 59  59 60  60          /**/ ///   61 61        /// 当回发时,装载用户输入的新数据62 62        ///  63  63          ///   64  64          ///   65  65          ///   true表示数据改变,将会执行下面的方法RaisePostDataChangedEvent; 否则数据未改变 66  66          public   virtual   bool  LoadPostData( string  postDataKey, NameValueCollection postCollection) 67  67         { 68  68              string  strOldValue  =  Text; 69  69              string  strNewValue  =  postCollection[ this .UniqueID]; 70  70              if ( strOldValue  ==   null   ||  ( strOldValue  !=   null   &&   ! strOldValue.Equals(strNewValue))) 71  71             { 72  72                  this .Text  =  strNewValue; 73  73                  return   true ; 74  74             } 75  75              return   false ; 76  76         } 77  77 78  78          /**/ ///   79 79        /// 仅当上面方法LoadPostData返回true时,此方法将会执行80 80        ///  81  81          public   virtual   void  RaisePostDataChangedEvent() 82  82         { 83  83             OnTextChanged(EventArgs.Empty); 84  84         } 85  85 86  86          public   event  EventHandler TextChanged; 87  87          protected   virtual   void  OnTextChanged(EventArgs e) 88  88         { 89  89              if  (TextChanged  !=   null ) 90  90             { 91  91                 TextChanged( this , e); 92  92             } 93  93         } 94  94     } 95  95 } 96  96   2. 前台页面文件UsingTextBoxControl.aspx代码(使用方法) 1  <% @ Page Language = " C# "  AutoEventWireup = " true "   CodeFile = " UsingTextBoxControl.aspx.cs "  Inherits = " _Default "   ValidateRequest = " false " %> 2  <% @ Register Assembly = " KingControls "  Namespace = " KingControls "  TagPrefix = " KSP "   %> 3  … … 4  < KSP:TextBox ID = " KingTextBox "  runat = " server "  OnTextChanged = " KingTextBox_TextChanged "  Text = "" > KSP:TextBox> 5 … …6 

(). 示例代码下载

    http://www.cnblogs.com/Files/ChengKing/KingControls.rar

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1475110


最新回复(0)