2011-06-26 38 views
2

我的解決方案中遇到了最棘手的問題。 我有一個按鈕,我定製。它繼承了UserControl,其文本在該控件中被表示爲Label。編譯後,用戶控件的文本消失在設計器中

當然,我想按鈕的文本被覆蓋來設置標籤的文本:

要麼,

/// <summary> 
    /// Gets or sets the text that appears in the button 
    /// </summary> 
    [Category("Appearance"), Description("Gets or sets the text on the button.")] 
    [Browsable(true)] 
    public override string Text 
    { 
     get 
     { 
      return base.Text; 
     } 
     set 
     { 
      base.Text = value; 
      labelButtonText.Text = value; 
     } 
    } 

或者

/// <summary> 
    /// Gets or sets the text that appears in the button 
    /// </summary> 
    [Category("Appearance"), Description("Gets or sets the text on the button.")] 
    [Browsable(true)] 
    public override string Text 
    { 
     get 
     { 
      return labelButtonText.Text ; 
     } 
     set 
     { 
      labelButtonText.Text = value; 
     } 
    } 

不論採用何種方法,當我使用在另一個UserControls/Forms中輸入按鈕, 我在設計器中顯式放入的文本會在編譯後消失。

我檢查了「Button.designer.cs」文件,並且沒有將文本分配給null或UserControl和Label均爲空。

編輯此外,當我在設計器中設置Text屬性時,它不會在* .designer.cs文件中設置。

在此先感謝。

回答

4

是的,這是設計。該UserControl.Text屬性看起來是這樣的:

[Browsable(false)] 
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
[EditorBrowsable(EditorBrowsableState.Never)] 
[Bindable(false)] 
public override string Text 
{ 
    get 
    { 
     return base.Text; 
    } 
    set 
    { 
     base.Text = value; 
    } 
} 

你拿着[可瀏覽]屬性的保健,而且不 [DesignerSerializationVisibility。隱藏是什麼使文本消失。通過撤消所有屬性來修復它:

[Browsable(true)] 
    [EditorBrowsable(EditorBrowsableState.Always)] 
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] 
    [Bindable(true)] 
    public override string Text { 
     // etc.. 
    } 
+0

非常感謝。你已經幫了我很大的忙。 – EZinman