如何创建自定义TextBox控件?

时间:2014-01-23 11:09:12

标签: c# asp.net user-controls

我希望在返回值之前,在我的页面上的每个Trim()控件上执行TexBox方法。我不想为每个TexBox控件硬编码相同的代码,我想以更优雅的方式进行。

我发现了以下课程

namespace System.Web.UI.WebControls
{
    public partial class TrimmedTextBuox : TextBox
    {
        private string text;
        public override string Text
        {
            get { return string.IsNullOrEmpty(text) ? text : text.Trim(); }
            set { text = value; }
        }     
    }
}

但它失败了,而debuggind编译器没有进入get{}set{}

之后,我创建了一个UserControl项,但必须从System.Web.UI.UserControl派生,而不是System.Web.UI.WebControls.TextBox才能使其正常工作(有一个异常指向该项)

那么,我该怎么做?

3 个答案:

答案 0 :(得分:3)

首先,您必须在.aspx页面中注册您的控件:

<%@ Register TagPrefix="customControls" Namespace="WebApplication.Custom.Controls" Assembly="WebApplication"%>

然后你可以使用标记来调用它

<customControls:TrimmedTextBuox  ID="txtTrim" runat="server"/>

另外,你不必创建另一个&#34;文本&#34;自定义TextBox中的属性。相反,它可以这样做:

namespace WebApplication.Custom.Controls
{
    public class TrimmedTextBuox : TextBox
    {
        public override string Text
        {
            get
            {                
                return base.Text;
            }
            set
            {
                if (!String.IsNullOrEmpty(value))
                    base.Text = value.Trim();
            }
        }
    }
}

答案 1 :(得分:0)

这会在插入之前递归修剪所有文本框。

 public static void trimRecursive(Control root)
    {
      foreach (Control control in root.Controls)
      {
        if (control is TextBox)
        {
            var textbox = control as TextBox;
            textbox.Text = textbox.Text.Trim();
        }
        else
        {
            trimRecursive(control);
        }
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    trimRecursive(Page);
}

答案 2 :(得分:0)

解决问题的简单方法是使用new关键字隐藏基类的Text属性。示例代码......

public class TrimmedTextBox : TextBox
{
    public new string Text
    {
        get
        {
             var t = (string) GetValue(TextProperty);
            return t != null ? t.Trim() : string.Empty;
        }
    }
}

有关具有属性的新关键字如何为此SO Question

工作的更多信息