一个奇怪的属性继承行为案例

时间:2009-08-13 14:03:29

标签: c# .net winforms

也许标题不是那么清楚,但这正是我所经历的:

  • 我创建了一个基本表单,其中包含一个OK和一个Cancel按钮(名为BaseOkCancelButtonForm) 此表单还有一些属性如下所示:

        [Browsable (true)]
        [Category ("Design")]
        [DesignerSerializationVisibility (DesignerSerializationVisibility.Visible)]
        public string OkButtonText
        {
            get
            {
                return btnOk.Text;
            }
            set
            {
                btnOk.Text = value;
            }
        }
    
       [Browsable (true)]
        [Category ("Design")]
        [DefaultValue (true)]
        [DesignerSerializationVisibility (DesignerSerializationVisibility.Visible)]
        public bool OkButtonVisible
        {
            get
            {
                return btnOk.Visible;
            }
            set
            {
                btnOk.Visible = value;
            }
        }
    
        [Browsable (true)]
        [Category ("Design")]
        [DesignerSerializationVisibility (DesignerSerializationVisibility.Visible)]
        public string CancelButtonText
        {
            get
            {
                return btnCancel.Text;
            }
            set
            {
                btnCancel.Text = value;
            }
        }
    
        [Browsable (true)]
        [Category ("Design")]
        [DefaultValue (true)]
        [DesignerSerializationVisibility (DesignerSerializationVisibility.Visible)]
        public bool CancelButtonVisible
        {
            get
            {
                return btnCancel.Visible;
            }
            set
            {
                btnCancel.Visible = value;
            }
        }
    

现在,这就是发生的事情: 我创建了一个新的表单,它继承自我的BaseOkCancelButtonForm。

当我修改继承表单的CancelButtonText属性并重建项目时,一切都按预期进行:“取消”按钮的文本仍然是我设置的文本。 但是,当我对CancelButtonVisible属性执行相同操作时,出现问题。 当我将CancelButtonVisible属性设置为false并重建项目时,VS.NET会将此属性的值重置为true。 :

出于这样或那样的原因,设计师不会保留更改后的值? 这是知道的行为吗?我做错了吗?

1 个答案:

答案 0 :(得分:0)

嗯,当我在我的基本表单上保护CancelButton时,似乎这确实有效。 但是,我不想这样做。 此外,它也没有必要这样做...(并且更改按钮的文本属性不需要保护按钮,就像应该这样)...

怪异。