ASP.NET自定义控件开发系列(一)

最近做了一些自定义控件的开发工作,虽然遇到一些困难,但是感觉自定义控件的开发在某些时候还是很有好处的,然后就想写一个关于自定义控件开发的系列文章,一是给自己做个备忘;二是把遇到的问题记录下来,希望后来者能少走弯路。
本系列希望通过对实例的讲解,能包含自定义控件开发的大部分内容。

在系列(一)中先介绍一个简单的实例,在网上看到一个很经典的入门级自定义控件的开发,本文即以此为例。

1、需求:含有换行的TextBox控件的Text属性获取的文本能够自动在网页中显示换行
2、设计:重写TextBox的Text属性,将TextBox的回车换行符转换为html能够识别的
3、代码:
WrapTextBox.cs:

 

 1using System; 
 2using System.Collections.Generic; 
 3using System.ComponentModel; 
 4using System.Text; 
 5using System.Web; 
 6using System.Web.UI; 
 7using System.Web.UI.WebControls; 
 8  
 9namespace VeryCodes.Web.Controls 
10
11      /// <summary> 
12      /// 该控件扩展了TextBox控件,可以通过设置属性使回车换行转换为html的换行 
13    /// 适用于多行文本框 
14    /// </summary> 

15    [DefaultProperty("Text")] 
16    [ToolboxData("<{0}:WrapTextBox runat=server></{0}:WrapTextBox>")] 
17    public class WrapTextBox : System.Web.UI.WebControls.TextBox 
18    
19        /// <summary> 
20        /// 是否换行,默认为false 
21        /// </summary> 

22        private bool _IsWrap = false
23  
24        /// <summary> 
25        /// 重写Text属性 
26      /// </summary> 

27        public override string Text 
28        
29            get 
30            
31                //返回转换后代码 
32                return format(base.Text); 
33            }
 
34            set 
35            
36                base.Text = value; 
37            }
 
38        }
 
39  
40        /// <summary> 
41        /// 字符串换行 
42      /// </summary> 
43        /// <param name="msg">输入的字符串</param> 
44        /// <returns>换行后的字符串</returns> 

45        private string format(string msg) 
46        
47            if (IsWrap) 
48            
49                //关键部分,换行符的替换 
50                msg = msg.Replace(" """).Replace(Convert.ToString((char)10), " ").Replace(Convert.ToString((char)13), "<br />"); 
51            }
 
52            return msg; 
53        }
 
54  
55        /// <summary> 
56        /// 暴漏一个属性,使控件使用者可以设置是否使用换行符生成功能 
57      /// </summary> 

58        [Bindable(true)] 
59        [Description("是否启用生成换行符")] 
60        [Category("外观")] 
61        [DefaultValue("false")] 
62        public bool IsWrap 
63        
64  
65            get 
66            
67                return _IsWrap; 
68            }
 
69            set 
70            
71                _IsWrap = value; 
72            }
 
73        }
 
74    }
 
75}

76

 

4、测试:
(1)WrapTextBoxTest.aspx:

 1<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WrapTextBoxTest.aspx.cs" Inherits="_Default"  ValidateRequest="false" enableEventValidation="false" %> 
 2<%@ Register Assembly="VeryCodes.Controls" Namespace="VeryCodes.Web.Controls" TagPrefix="cc2" %> 
 3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
 4<html xmlns="http://www.w3.org/1999/xhtml"> 
 5<head runat="server"> 
 6    <title>RichTextBox</title> 
 7</head> 
 8<body> 
 9    <form id="form1" runat="server"> 
10        <div> 
11            WrapTextBox控件:<br /> 
12            输入一段话:<br /> 
13          <cc2:WrapTextBox ID="WrapTextBox1" runat="server" IsWrap="True" Rows="5" TextMode="MultiLine"></cc2:WrapTextBox> 
14            <br /> 
15            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="提交" /> 
16            <br /> 
17            显示:<br /> 
18            <asp:Label ID="Label1" runat="server"></asp:Label></div> 
19    </form> 
20</body> 
21</html>
22

 

(2)WrapTextBoxTest.aspx.cs:

 1using System; 
 2using System.Data; 
 3using System.Configuration; 
 4using System.Web; 
 5using System.Web.Security; 
 6using System.Web.UI; 
 7using System.Web.UI.WebControls; 
 8using System.Web.UI.WebControls.WebParts; 
 9using System.Web.UI.HtmlControls; 
10  
11public partial class _Default : System.Web.UI.Page 
12
13    protected void Page_Load(object sender, EventArgs e) 
14    
15  
16    }
 
17    protected void Button1_Click(object sender, EventArgs e) 
18    
19        this.Label1.Text = this.WrapTextBox1.Text; 
20    }
 
21}

22

 

5、总结:
(1)这个自定义控件继承了TextBox,这是扩充控件功能基本方式。通过添加或重写属性,增强控件的功能;
(2)DefaultProperty是设置控件默认的属性的,这里是Text属性,就是当选择这个控件的时候,在属性窗口中自动被选中的是Text属性;
(3)[ToolboxData("<{0}:WrapTextBox runat=server>")]这句设置控件拖动到页面后的代码
{0}表示控件标记的前缀,在这个例子中就是cc2。


 转自:http://blog.bossma.cn/archives/2008/03/101

posted on 2009-03-25 01:46  小林子!  阅读(576)  评论(1编辑  收藏  举报

金山词霸网页划词