Effectively "Override" Control.Enabled

本文关键字:quot Enabled Control Override Effectively | 更新日期: 2023-09-27 18:12:34

我已经看了一下,我不能想出一个关于如何有效地"覆盖"控制的答案。在c# WinForms 3.5中启用。

我们的情况是,我们有一个基本表单或主表单,我们使用它在底部添加状态栏,在顶部添加工具栏。这个表单将被我们所有的其他表单继承,然后将控件添加到中央面板。

在一些从主基本表单继承的表单上,我们希望能够在表单上使用"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()的此事件中启用和禁用未完成?

Effectively "Override" Control.Enabled

控件中的Enabled属性用于启用/禁用整个控件,所以我不明白为什么您需要重写父窗体上的Enabled属性。如果你需要禁用centerPanel,添加一个属性来获取该面板,并禁用它。

我建议在基本表单中定义一个CenterPanel属性,然后使用它来禁用该面板:

// code defined in your FrmBaseStatus form
protected Control CenterPanel
{
    get
    {
        return this.panelBase;
    }
}

然后在继承的表单中使用:

// disable center panel and its childs
this.CenterPanel.Enabled = false;
//disable the whole form
this.Enabled = false;