【问题标题】:Windows Forms: How do you change the font color for a disabled labelWindows 窗体:如何更改禁用标签的字体颜色
【发布时间】:2019-01-12 02:58:18
【问题描述】:

我正在尝试为标签控件设置禁用的字体特征。我可以设置所有的字体特征(大小、粗体等),但是颜色会被默认的 windows 行为覆盖,这似乎是这两种颜色之一:

  • 如果背景颜色是透明的,则 ForeColor 与 TextBox disabled Color 相同。
  • 如果背景颜色设置为其他颜色,则 ForeColor 为深灰色。

下图演示了这种行为——第 1 列是标签,第 2 列是文本框,第 3 列是组合框。

编辑——解释图像:前两行是标签、文本框和组合框的默认样式。在后两行中,我将背景颜色设置为红色,将前景设置为白色。微软禁用的字体样式处理不一致。

【问题讨论】:

    标签: winforms


    【解决方案1】:

    您是否尝试过实现 EnabledChanged 事件?还是您在控件上寻找更多“样式”属性(据我所知,它们不存在)?

    【讨论】:

      【解决方案2】:

      对于文本框,您可以将 readonly 属性设置为 true,同时保持控件处于启用状态。然后,您可以将 BackColor 和 ForeColor 属性设置为您喜欢的任何值。用户仍然可以单击控件并有一个闪烁的光标,但他们将无法编辑任何内容。

      不确定这是否适用于其他控件类型,例如组合框或其他控件,因为我还没有机会进行实验,但值得一试。

      【讨论】:

        【解决方案3】:

        看看ControlPaint.DrawStringDisabled方法;这可能会有所帮助。我在为自定义控件覆盖 OnPaint 事件时使用了它。

        ControlPaint.DrawStringDisabled(g, this.Text, this.Font, Color.Transparent,
                        new Rectangle(CustomStringWidth, 5, StringSize2.Width, StringSize2.Height), StringFormat.GenericTypographic);
        

        【讨论】:

          【解决方案4】:

          为什么会出现这个问题?

          我会亲自让 Windows 处理它。人们习惯于禁用以某种方式显示的项目,因此,如果您开始尝试更改其外观的各个方面,您可能会开始让用户感到困惑。

          【讨论】:

            【解决方案5】:

            您可能需要覆盖 Paint 事件。到目前为止,我使用的所有工具包在禁用控件时都存在相同的问题。只是猜测他们让窗口绘制文本。至于标签,它们不是标准控件,这就是它们起作用的原因。

            【讨论】:

              【解决方案6】:

              我用下面的 OnPaint 方法覆盖了我的控件的 OnPaint 方法。我粘贴了整个控件类以便于复制。

              public partial class NewLabel : Label
              {
                  public NewLabel()
                  {
                      InitializeComponent();
                  }
              
                  protected override void OnPaint(PaintEventArgs e)
                  {
                      TextRenderer.DrawText(e.Graphics, this.Text.ToString(), this.Font, ClientRectangle, ForeColor);
                  }
              
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2017-12-23
                • 2018-08-02
                • 2021-05-07
                • 1970-01-01
                • 1970-01-01
                • 2013-04-25
                • 2021-09-26
                • 2011-09-05
                相关资源
                最近更新 更多