2011-01-21 66 views
5

我创建了一个用户控件,其中有一个文本框。我已经覆盖了基本控制的Text属性如下所示:自定义控件重写文本属性默认值

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

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

回答

4

最初的预感是它在对象上调用ToString()。覆盖ToString()以返回您的期望值。

+1

我完全忘了toString()方法。这可能是我获得价值的原因。谢谢,亚伦。尽管重写它没有任何效果。我忘记提及的一点是[Browsable(true)]是导致该行为的属性。通过删除它,一切都按预期工作。 – 2011-01-22 14:19:00

3

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

所以在你的例子中,textbox1.Text必须用控件ID填充。在您的用户控件,在OnInit或在适当情况下,你应该叫

this.Text = ""; 
+1

我曾尝试在许多事件中设置文本,并没有工作,s_hewitt。我可以做一个黑客去除价值,但它很丑陋。 – 2011-01-22 14:19:59

+1

然后你可能需要发布更多的代码。我不清楚你的控制是如何设置的以及如何导致这个问题。 – 2011-01-22 17:03:19

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