C# 如何创建自定义文本框控件?

C# 如何创建自定义文本框控件?,c#,asp.net,user-controls,C#,Asp.net,User Controls,在返回值之前,我想对页面上的每个TexBox控件执行Trim()方法。我不想为每个TexBox控件硬编码相同的代码,我想用更优雅的方式来实现 我发现我上了下面的课 namespace System.Web.UI.WebControls { public partial class TrimmedTextBuox : TextBox { private string text; public override string Text

在返回值之前,我想对页面上的每个
TexBox
控件执行
Trim()
方法。我不想为每个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; }
        }     
    }
}
但是它失败了,在调试时编译器没有进入
get{}
set{}
内部

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


那么,我该怎么做呢?

这将在插入之前递归地修剪所有文本框

 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);
}

首先,您必须在.aspx页面中注册控件,如下所示:

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

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

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

有关属性为new的关键字如何工作的更多信息,请参考此SO

如何调用您的
TrimmedTextBuox
?恐怕您没有使用您创建的自定义控件!尝试使用此
public new string Text
而不是
public override string Text
IMO“set”应该像Text=value一样进行修剪。Trim()不是“get”。@alfoks我已经尝试过了,没有任何结果。编辑似乎是正确的。查看Thiago Vinicius的评论。您是否有
trimmedtextbox tbox=new trimmedtextbox()代码中的某个地方?
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();
            }
        }
    }
}
public class TrimmedTextBox : TextBox
{
    public new string Text
    {
        get
        {
             var t = (string) GetValue(TextProperty);
            return t != null ? t.Trim() : string.Empty;
        }
    }
}