Background/border 按钮派生的 CustomControl

Background/border of a button derived CustomControl

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

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

这有几个问题:

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

  2. 当使用上面的代码用任何背景颜色绘制我的控件时,按钮周围似乎有一个边框,这是我不想要的。例如,在上图中,"Read From Device" 按钮有一个相当粗的边框,似乎是控件颜色。

  3. 当我的控件使用底层 Button.Enabled = false 绘制时,颜色与禁用按钮的默认颜色不同。您可以在下图中看到。与 "Save To Computer" 按钮相比,"Write To Device" 控件的颜色太暗,两者都已启用 = false。

  4. 禁用的控件的前景文本颜色错误。我如何利用基础 class' 机制正确绘制 text/background/border/etc?

考虑这些注意事项:

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

  2. 如果您不喜欢那个边框,请自己绘制按钮或使用 FlatStyle 设置为 Flat 并使用 FlatAppearance.BorderSize = 0 或任何其他外观和边框-你喜欢的尺寸。

  3. 同第一个

  4. 禁用Button的前景色是根据背景色计算的。因此,如果您按照第一条所述重新设置背景色,您将看不出有什么不同。