.net 为什么winforms设计器会忽略覆盖属性上的属性?

.net 为什么winforms设计器会忽略覆盖属性上的属性?,.net,visual-studio,winforms,inheritance,attributes,.net,Visual Studio,Winforms,Inheritance,Attributes,我有一个如下定义的用户控件: public partial class FooControl : UserControl { private System.Windows.Forms.GroupBox groupBox1; ... 我想让groupBox1.Text可以直接从设计器访问,所以我选择了显而易见的解决方案,并在我的FooControl中创建了以下属性: [CategoryAttribute("Appearance"), Descrip

我有一个如下定义的用户控件:

  public partial class FooControl : UserControl
  {
      private System.Windows.Forms.GroupBox groupBox1;
      ...
我想让groupBox1.Text可以直接从设计器访问,所以我选择了显而易见的解决方案,并在我的FooControl中创建了以下属性:

        [CategoryAttribute("Appearance"), DescriptionAttribute("The text associated with this control.")]
        public string Text
        {
            get { return groupBox1.Text; }
            set { groupBox1.Text = value;}
        }
这不起作用,因为文本已经在我的超类中定义(事实上,由于browseable=false属性,文本有点模糊,但我最终找到了它):

一个简单的解决方法是使用“Text2”而不是“Text”作为属性名,在这种情况下,一切正常

但是,如果我使用override或new,我的代码将编译(并工作),但我的文本属性在设计器中不可见


这种行为的原因是什么?是否有解决方法(除了使用另一个属性名称)?

我知道这是一个非常古老的问题,您可能已经解决了这个问题,但我发现这很有效,我想为任何可能受益的人发布它:

public partial class FooControl : UserControl
{
    string m_text;

    [CategoryAttribute("Appearance"), DescriptionAttribute("The text associated with this control.")]
    [Bindable(true)]
    [EditorBrowsable(EditorBrowsableState.Always)]
    [Browsable(true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    public override string Text
    {
        get { return m_text; }
        set
        {
            m_text = value;
            groupBox1.Text = m_text;
        }
    }

    public FooControl()
    {
        InitializeComponent();
    }
}

请注意,我没有在Visual Studio 2008中测试上述代码,但它应该可以正常工作。

我知道这是一个非常古老的问题,您可能已经解决了这个问题,但我发现这是可行的,我想为任何可能受益的人发布它:

public partial class FooControl : UserControl
{
    string m_text;

    [CategoryAttribute("Appearance"), DescriptionAttribute("The text associated with this control.")]
    [Bindable(true)]
    [EditorBrowsable(EditorBrowsableState.Always)]
    [Browsable(true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    public override string Text
    {
        get { return m_text; }
        set
        {
            m_text = value;
            groupBox1.Text = m_text;
        }
    }

    public FooControl()
    {
        InitializeComponent();
    }
}
注意,我没有在VisualStudio2008中测试上述代码,但它应该可以正常工作