c# – 有效地“覆盖”Control.Enabled
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 有效地“覆盖”Control.Enabled,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1431字,纯文字阅读大概需要3分钟。
内容图文
![c# – 有效地“覆盖”Control.Enabled](/upload/InfoBanner/zyjiaocheng/791/facedb0df0c9431ba6391cd64e026fbc.jpg)
我看了一下,我无法想出如何有效地“覆盖”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属性.如果您需要准确禁用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# – 有效地“覆盖”Control.Enabled全部内容,希望文章能够帮你解决c# – 有效地“覆盖”Control.Enabled所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。