【问题标题】:Background/border of a button derived CustomControl按钮派生的 CustomControl 的背景/边框
【发布时间】:2017-03-06 08:50:33
【问题描述】:

我有一个派生自按钮的 CustomControl。在此控件生命中的某些时刻,我想将其背景设置为特殊颜色(即 Plum)或普通控件颜色(即与其他按钮的默认颜色相同)。这是最有效的相关代码。

public partial class MySpecialButton : Button
{
    private void SetButtonState()
    {
        if (isSpecial && Enabled)
        {
            BackColor = Color.Plum;
        }
        else
        {
            BackColor = Enabled ? SystemColors.Control : SystemColors.ControlDark;
        }
    }
}

这有几个问题:

  1. 当我的控件启用且未处于特殊模式时,与其他按钮相比,绘制按钮的控件颜色似乎太浅。您可以在下图中看到这一点,其中“创建默认值”按钮是具有默认颜色的普通按钮,而“从设备读取”按钮是我的特殊按钮,背景颜色设置为 SystemColors.Control。为什么两种颜色不一样?

  2. 当我的控件使用上面的代码以任何背景颜色绘制时,按钮周围似乎有一个我不想要的边框。例如,在上图中,“从设备读取”按钮有一个相当粗的边框,看起来像是控件颜色。

  3. 当我的控件使用底层 Button.Enabled = false 绘制时,颜色与禁用按钮的默认颜色不同。你可以在下图中看到。与“保存到计算机”按钮相比,“写入设备”控件的颜色太暗,两者都已启用 = false。

  4. 禁用的控件具有错误的前景文本颜色。如何利用基类的机制正确绘制文本/背景/边框/等?

【问题讨论】:

    标签: c# winforms button background border


    【解决方案1】:

    请考虑以下注意事项:

    1. 设置ButtonBackColor 属性会导致将UseVisualStyleBackColor 设置为false,而您在普通按钮和自定义按钮之间看到的差异就是因为这个原因。要解决此问题,您应该在将BackColor 重置为SystemColors.Control 之后再次将UseVisualStyleBackColor 设置为true。

    2. 如果您不喜欢该边框,请自行绘制按钮或使用 FlatStyle 设置为 Flat 并使用 FlatAppearance.BorderSize = 0 或您喜欢的任何其他外观和边框大小。

    3. 同第一名。

    4. 禁用Button 的前景色是根据背景色计算的。因此,如果您按照第一条所述重置背景颜色,您将看不到任何差异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 2014-10-20
      • 2022-01-18
      • 1970-01-01
      • 2021-10-02
      • 2012-11-14
      • 1970-01-01
      相关资源
      最近更新 更多