代码之家  ›  专栏  ›  技术社区  ›  Brann

为什么winforms设计器忽略重写属性上的属性?

  •  1
  • Brann  · 技术社区  · 15 年前

      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;}
            }
    

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

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

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

    1 回复  |  直到 15 年前
        1
  •  1
  •   Cameron Tinker    12 年前

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

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