【问题标题】:Buttons sometimes doesn't get disabled on windows form按钮有时不会在 Windows 窗体上被禁用
【发布时间】:2026-01-17 10:30:01
【问题描述】:

我有一个 Windows 窗体应用程序,并且我有 UserControl,它有一些组框和一些应该根据用户角色启用或禁用的按钮,如下所示:

this.btnEditArchive.Enabled = (ActiveUser.Instance.role == DConstants.kAdmin || ActiveUser.Instance.role == DConstants.kSuperAdmin);

这被放置在 _Load 事件中。现在有时当我在页面之间切换时, 这些按钮看起来没有被禁用。但是当我试图触摸它们时,就会变得残疾。似乎 UI 以某种方式未正确绘制。如何解决这个问题?这可能是什么原因?

【问题讨论】:

  • 这完全取决于实现。在页面之间切换是什么意思?你怎么做切换? Load 事件的所有者是谁,控制者是谁?表格?
  • 当前格式的问题(以及答案)对未来的读者没有用处。请编辑问题并添加更多详细信息。看看How to Ask

标签: c# winforms button user-controls


【解决方案1】:

这可能是错误的,但根据this_Load 事件仅在第一次调用 Form 时发生一次。也许将您的代码放入_Activated 事件中就可以了?

编辑

我对答案是什么感到困惑,但原理是一样的:_Load 事件仅在第一次调用时发生一次。因此,如果您需要在它们之间切换时更新某些内容,请将您的代码放入 _VisibleChanged 事件中。

【讨论】:

  • 我很困惑,抱歉。但经过一番研究,UserControl 对_Load 事件有相同的描述:“在控件第一次可见之前发生”。也许这就是问题所在?如果将代码放入_VisibleChanged 事件会怎样?
  • 很高兴我能帮上忙! :)
  • @krobelusmeetsyndra 如果答案有问题并且您在 cmets 中修复了它,最好编辑答案并在答案中反映该更改,以使答案更相关和更有用供未来的读者阅读。
【解决方案2】:

不是很明白,可以试试这个

this.Refresh();

【讨论】:

  • 不,它没有帮助。正如我所说,当我单击其中一个按钮(其中有 3 个)时,它们都会被禁用。