.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中测试上述代码,但它应该可以正常工作