导出CustomControl

时间:2016-10-24 14:16:12

标签: c# winforms button background border

我有一个CustomControl,它派生自Button。在这个控件的生命中的某些点,我想将它的背景设置为特殊颜色(即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。为什么两种颜色不同? Depiction of different back colors

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

  3. 使用基础Button.Enabled = false绘制我的控件时,颜色与禁用按钮的默认颜色颜色不同。您可以在下面的图片中看到。与“保存到计算机”按钮相比,“写入设备”控件的颜色太暗,两者都具有Enabled = false。 Depiction of different disabled colors

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

1 个答案:

答案 0 :(得分:1)

请考虑以下注意事项:

  1. BackColor原因设置Button的{​​{1}}属性设置为UseVisualStyleBackColor,并且您在正常按钮和自定义按钮之间看到的差异是因为这个的。要解决此问题,请在将false重置为UseVisualStyleBackColor后再次将BackColor设置为true。

  2. 如果您不喜欢该边框自行绘制按钮或使用SystemColors.Control设置为FlatStyle并使用Flat或任何其他外观和边框大小你更喜欢。

  3. 与第一名相同。

  4. 根据背景颜色计算已禁用的FlatAppearance.BorderSize = 0的前景色。因此,如果您按照第一项所述重置背景颜色,您将看不出任何差异。