gpt4 book ai didi

c# - 有效 "Override"Control.Enabled

转载 作者:太空狗 更新时间:2023-10-30 01:25:00 25 4
gpt4 key购买 nike

我环顾四周,但无法就如何有效地“覆盖”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() 的此事件中未完成启用和禁用?

最佳答案

控件中的 Enabled 属性用于启用/禁用整个控件,所以我不明白为什么你需要重写你的 Enabled 属性 parent 的形式。如果您需要完全禁用 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;

关于c# - 有效 "Override"Control.Enabled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7928026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com