【问题标题】:Winforms controls - why doesn't Text go grey when Enabled = false?Winforms 控件 - 为什么启用 = false 时文本不会变灰?
【发布时间】:2011-07-20 18:34:34
【问题描述】:

当我在我的 VS2008 Winforms 项目中禁用某些 Button 控件时,我遇到了一些不一致的行为。

当我设置Enabled = false 时,按钮被禁用,但一些(尽管不是全部)按钮的文本保持黑色。

我希望所有按钮在禁用时显示灰色文本 - 这使用户更容易看到按钮被禁用。

如果按钮放在 GroupBox 中似乎更有可能发生,但我不确定情况是否总是如此。

我猜是 Button 的某些属性组合,和/或包含它的 Form 或 GroupBox 的属性组合导致了这种情况,但我看不出任何有意义的模式。

编辑:我们有自己的外观和感觉,并且正在将包含表单的 BackColor 设置为不同的颜色。

谁能解释为什么会发生这种情况?

【问题讨论】:

  • 你能发一些示例项目吗,这个问题在哪里?我无法重现这种行为。
  • 我可以试试。怎么寄给你?
  • 显而易见的解决方法是使用默认系统主题。它们总是正确地绘制,它们可由用户定制,并且它们对用户来说是舒适/熟悉的。手动更改颜色永远没有任何借口。
  • @Cody - 提供更多信息作为答案,我会投票给你。虽然我从您的个人资料中看到您并不真正需要代表,并且您对系统主题有一点偏见......
  • @Tom:是的,我同意 99% 的用户的偏见。我喜欢系统主题的原因是因为它们会自动解决这样的问题。请记住,在您的应用中自定义一些颜色而将其他颜色留给系统主题几乎不是一个好主意。如果我设置了高对比度主题,那么这些颜色很可能会与您的自定义颜色发生冲突并使您的应用程序无法使用。就像您在此处观察到的那样,用户期望各种各样的东西,例如禁用的按钮呈现“灰显”的外观,而过多的自定义可能/确实会干扰这一点。

标签: winforms visual-studio-2008 button


【解决方案1】:

问题是因为表单的背景色设置为不同的颜色。

一些谷歌搜索显示许多其他人都遇到过这种情况。建议的解决方案非常复杂 - 子类化您自己的按钮控件并覆盖 OnPaint 等。

但事实证明有一个简单的解决方法......

当您将按钮添加到表单时,按钮的 BackColor 属性将设置为与表单的 BackColor 相同的值,尽管它在设计或运行时不会以这种方式显示。

如果您将按钮的 BackColor 属性设置为 System -> ControlLight,它将解决问题 - 禁用的按钮现在看起来已禁用。

请注意,重置 BackColor 时有一个奇怪的问题 - UseVisualStyleBackColor 属性将从 True 变为 False。但这似乎没有任何效果,可以改回True,不会对外观有任何影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2021-12-21
    • 2023-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多