波斯马BOSSMA Information Technology

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

发布时间:2008年3月7日 / 分类:ASP.NET / 11,777 次浏览 / 评论

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

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

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

3、代码:
WrapTextBox.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace VeryCodes.Web.Controls
{
      //该控件扩展了TextBox控件,可以通过设置属性使回车换行转换为html的换行
    // 适用于多行文本框
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:WrapTextBox runat=server>")]
    public class WrapTextBox : System.Web.UI.WebControls.TextBox
    {
        //是否换行,默认为false
        private bool _IsWrap = false;

        //重写Text属性
        public override string Text
        {
            get
            {
                //返回转换后代码
                return format(base.Text);
            }
            set
            {
                base.Text = value;
            }
        }

        //字符串换行
//输入的字符串
        //换行后的字符串
        private string format(string msg)
        {
            if (IsWrap)
            {
                //关键部分,换行符的替换
                msg = msg.Replace(" ", "").Replace(Convert.ToString((char)10), " ").Replace(Convert.ToString((char)13), "
");
            }
            return msg;
        }

        //暴漏一个属性,使控件使用者可以设置是否使用换行符生成功能
        [Bindable(true)]
        [Description("是否启用生成换行符")]
        [Category("外观")]
        [DefaultValue("false")]
        public bool IsWrap
        {

            get
            {
                return _IsWrap;
            }
            set
            {
                _IsWrap = value;
            }
        }
    }
}

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

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<%@ Register Assembly="VeryCodes.Controls.Web" Namespace="VeryCodes.Controls.Web" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
WrapTextBox控件: 输入一段话:<cc1:WrapTextBox ID="WrapTextBox1" runat="server"></cc1:WrapTextBox>
显示:<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</div>
</form>
</body>
</html>

(2)WrapTextBoxTest.aspx.cs:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        this.Label1.Text = this.WrapTextBox1.Text;
    }
}

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

<%@ Register Assembly="VeryCodes.Controls.Web" Namespace="VeryCodes.Controls.Web" TagPrefix="cc1" %>

本节结束。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《ASP.NET自定义控件开发系列(一)

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

发表评论