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

本文介绍如何从底层实现一个类似于ASP.NET TextBox的控件,包括控件的创建过程及其实现原理。通过实例演示了如何设置和获取显示文本,并在用户输入数据时触发事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一). 概述
示例制作一个与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 /**/ /// <summary>
17 17 /// MakingaTextBoxWebControl
18 18 /// </summary>
19 19 public class TextBox:Control,IPostBackDataHandler // IPostBackDataHandler:处理回发数据使用
20 20 {
21 21 public TextBox()
22 22 {
23 23 }
24 24
25 25 /**/ /// <summary>
26 26 /// 设置或获取显示文本
27 27 /// </summary>
28 28 public string Text
29 29 {
30 30 // Web编程中要用ViewState为两次回发共享数据
31 31 get
32 32 {
33 33 Strings = (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 /**/ /// <summary>
44 44 /// 生成呈现Html格式标记
45 45 /// </summary>
46 46 /// <paramname="writer"></param>
47 47 protected override void Render(HtmlTextWriterwriter)
48 48 {
49 49 StringBuildersb = new StringBuilder();
50 50 sb.Append( " <inputtype=\ " 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 /**/ /// <summary>
61 61 /// 当回发时,装载用户输入的新数据
62 62 /// </summary>
63 63 /// <paramname="postDataKey"></param>
64 64 /// <paramname="postCollection"></param>
65 65 /// <returns> true表示数据改变,将会执行下面的方法RaisePostDataChangedEvent;否则数据未改变 </returns>
66 66 public virtual bool LoadPostData( string postDataKey,NameValueCollectionpostCollection)
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 /**/ /// <summary>
79 79 /// 仅当上面方法LoadPostData返回true时,此方法将会执行
80 80 /// </summary>
81 81 public virtual void RaisePostDataChangedEvent()
82 82 {
83 83 OnTextChanged(EventArgs.Empty);
84 84 }
85 85
86 86 public event EventHandlerTextChanged;
87 87 protected virtual void OnTextChanged(EventArgse)
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 <% @PageLanguage = " C# " AutoEventWireup = " true " CodeFile = " UsingTextBoxControl.aspx.cs " Inherits = " _Default " ValidateRequest = " false " %>
2 <% @RegisterAssembly = " KingControls " Namespace = " KingControls " TagPrefix = " KSP " %>
3 ……
4 < KSP:TextBoxID = " KingTextBox " runat = " server " OnTextChanged = " KingTextBox_TextChanged " Text = "" ></ KSP:TextBox >
5 ……
6

(). 示例代码下载

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值