2009-10-29 86 views
1

我有这样定义的用户控件:我想从设计师做groupBox1.Text直接访问,所以我去了明显的解决方案为什么winforms设计器忽略重写属性的属性?

public partial class FooControl : UserControl 
    { 
     private System.Windows.Forms.GroupBox groupBox1; 
     ... 

,并在我的FooControl创建了以下属性:

 [CategoryAttribute("Appearance"), DescriptionAttribute("The text associated with this control.")] 
     public string Text 
     { 
      get { return groupBox1.Text; } 
      set { groupBox1.Text = value;} 
     } 

,因为文字是我的超类中已经定义这不起作用(事实上,这是一个有点,因为可浏览= false属性的黑暗,但我终于找到它):

public class UserControl : ContainerControl 
    { 

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

一个简单的解决方法是使用“Text2”而不是“Text”作为属性名称,在这种情况下,一切正常。但是,如果我使用覆盖或新建,我的代码编译(和工程),但我的文本属性在设计器中不可见。

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

+0

VS你上哪个版本? – JohnIdol 2009-10-29 15:13:31

+0

vs2008 v9.0.30729.1 SP – Brann 2009-10-30 10:14:49

回答

1

我知道这是一个很古老的问题,你可能已经解决了这一点,但我发现这工作,我想后的人谁可以受益:

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中测试上述代码,但它应该没有问题。