2011-01-21 88 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(); 
    } 
}