C# C语言中的形式继承#

C# C语言中的形式继承#,c#,inheritance,forms,C#,Inheritance,Forms,我有以下问题:我有一个基本窗体,它的底部有一个面板,面板内有一些按钮。继承此基础表单的表单可以通过子表单属性中显示的“ButtonCloseVisibility”等属性修改基础表单按钮的可见性。问题是,有时当子窗体刷新时(例如,当我双击一个事件,删除代码中新创建的事件并返回设计器时),按钮的可见性会再次设置为默认状态。我使用了继承的窗体,但没有使用控件 如果你已经试过了,我很抱歉 尝试在基类的各种事件中放置调试消息。在设计模式下,可能会有一次触发,您可以重新应用设置。这很可能是因为基本属性上缺少

我有以下问题:我有一个基本窗体,它的底部有一个面板,面板内有一些按钮。继承此基础表单的表单可以通过子表单属性中显示的“ButtonCloseVisibility”等属性修改基础表单按钮的可见性。问题是,有时当子窗体刷新时(例如,当我双击一个事件,删除代码中新创建的事件并返回设计器时),按钮的可见性会再次设置为默认状态。

我使用了继承的窗体,但没有使用控件

如果你已经试过了,我很抱歉


尝试在基类的各种事件中放置调试消息。在设计模式下,可能会有一次触发,您可以重新应用设置。

这很可能是因为基本属性上缺少一个属性。请看一看,尤其是
DesignerSerializationVisibilityAttribute

是的,它在Visual Studio中经常发生。将更改保留在子窗体构造函数中或在OnLoad()中执行。如果您不想在设计模式下的子窗体中看到更改,也可以添加以下复选框

   if(!DesignMode){
    ....
   }

我不确定我是否完全理解,但在med看来,如果visibility属性被覆盖,该值是多少?如果在设计器文件中手动更改此值,则下次刷新设计器文件时(例如,添加新控件时),该值将被覆盖


尝试从properties选项卡设置值,而不是手动将其写入designer文件。

VS中WinForms/控件上的可视元素的继承没有那么好,也没有那么可靠——正如我所发现的那样,我付出了代价!我担心,消失或重新排列控件,或覆盖属性是常态

当我研究这个问题时,MS的回答似乎是,它太难正确实施,而且他们没有计划解决它!在我看来,它很大程度上依赖于子控件中的代码生成,而不是真正的继承


顺便说一句,DesignMode对于直接在窗体上的控件是可以的,但如果您在窗体上的控件或任何更深层的层次结构上具有控件,则它就不可靠。去年的某个时候,我在这里发布了一篇帖子或给出了答案。

当我有一个基本表单并使用直接从控件获取/设置属性的属性时,我会得出这样的答案:

public bool ControlVisibility
{
    get{ return control.Visibility; }
    set{ control.Visibility = value; }
}
在子窗体中修改时,此修改不会持久化为代码,并且可见性由基础窗体定义,因此每次打开子窗体或重建项目时,继承控件的可见性默认为基础窗体值。为了解决此问题,我们必须在属性中添加一个字段并更改其值:

private bool _controlVisibility;

public bool ControlVisibility
{
    get{ return _controlVisibility; }
    set
    { 
        _controlVisibility = value;
        control.Visibility = value;
    }
}

通过这种方式,属性被持久化到代码中。

我在“属性”选项卡中更改了属性,但它一直被覆盖