自定义控件重写文本属性默认值

时间:2011-01-21 19:47:17

标签: c# properties custom-controls

我创建了一个用户控件,里面有一个文本框。我已经覆盖了基本控件的Text属性,如下所示:

    [Browsable(true)]
    [DefaultValue("")]
    [Description("Test1"), Category("Test")]
    public new string Text
    {
        get
        {
            return textBox1.Text;
        }
        set
        {
            textBox1.Text= value;
        }
    }

现在,我遇到了这个问题,我在表单中创建控件的任何实例,Text总是有一个控件名+数字(实例)的值。我想知道为什么会发生这种情况,以及如何删除此默认值?感谢。

3 个答案:

答案 0 :(得分:4)

初步预感是它在对象上调用ToString()。覆盖ToString()以返回所需的值。

答案 1 :(得分:3)

属性DefaultValue未设置默认值。该属性用于描述默认值。您必须自己设置默认值,然后使用该属性来描述它。

因此,在您的示例中,textbox1.Text必须使用控件ID进行填充。在您的UserControl上,OnInit或在适当的地方,您应该致电

this.Text = "";

答案 2 :(得分:2)

[DefaultValue("")]
public override string Text
{
    get { return base.Text; }
    set
    {
        if (this.DesignMode && (Environment.StackTrace.Contains("System.Windows.Forms.Design.ControlDesigner.InitializeNewComponent")))
            return;
        base.Text = value; 
        Invalidate();
    }
}