【发布时间】:2011-12-17 04:49:00
【问题描述】:
我环顾四周,无法找到关于如何在 C# WinForms 3.5 中有效地“覆盖”Control.Enabled 的答案。
我们的情况是我们有一个基本表单或主表单,我们使用它在底部添加一个状态栏,在顶部添加一个工具栏。这个表单被我们所有的其他表单继承,然后将控件添加到中心面板。
在一些从主基础表单继承的表单上,我们希望能够在表单上使用“启用”属性,但我们希望能够覆盖功能,因此它只会禁用中心面板而不是状态/菜单栏,因此它仍然可以移动表单。
我已尝试在主表单 (FrmBaseStatus) 上执行以下操作:
private bool enabled = true;
public new bool Enabled
{
return this.enabled;
}
set
{
this.enabled = value;
this.panelBase.Enabled = value;
}
但是,显然这不是真正的覆盖,如果我们在继承的表单之一中的基本面板上有一个用户控件,并且我们想要从这个用户控件覆盖表单,我们必须执行以下操作:
((FrmBaseStatus)this.ParentForm).Enabled = true;
有没有其他方法可以做到这一点,还是我们一直坚持转换为我们的基本表单以达到我们想要使用的 Enabled 属性。?
注意:是否会覆盖 OnEnabled 事件而不调用基础 OnEnabled 来执行此操作,还是在 Control.OnEnabled() 的此事件中未完成启用和禁用?
【问题讨论】:
-
代码意义不大。当您禁用表单时,它的所有子控件也会被禁用。包括面板。子控件不应用于禁用其父控件。使用事件。
-
您是否尝试在 .EnabledChanged 中重新启用您的控件?
-
问题是“表单”本身不能被禁用,因为你不能移动它或者什么都没有。
标签: c# winforms inheritance controls overriding