编辑后,用户控件的文本在设计器中消失

时间:2011-06-26 12:43:36

标签: .net winforms visual-studio-2005 designer

我的解决方案中发生了最棘手的事情。 我有一个按钮,我定制。它继承UserControl,其文本在该控件内表示为Label。

当然,我希望覆盖按钮的文本以设置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”文件,并且没有UserControl和Label都没有将文本赋值为null,也没有为空。

编辑:此外,当我在设计器中设置Text属性时,它不会在* .designer.cs文件中设置。

提前致谢。

1 个答案:

答案 0 :(得分: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;
    }
}

您负责[Browsable]属性但 [DesignerSerializationVisibility]。隐藏是使文本消失的原因。通过撤消所有属性来修复它:

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