我有一个CustomControl,它派生自Button。在这个控件的生命中的某些点,我想将它的背景设置为特殊颜色(即Plum)或普通控制颜色(与其他按钮的默认颜色相同)。这是主要有用的相关代码。
public partial class MySpecialButton : Button
{
private void SetButtonState()
{
if (isSpecial && Enabled)
{
BackColor = Color.Plum;
}
else
{
BackColor = Enabled ? SystemColors.Control : SystemColors.ControlDark;
}
}
}
这有几个问题:
当我的控件启用而不是特殊模式时,与其他按钮相比,绘制按钮的控件颜色看起来太亮了。您可以在下图中看到这一点,其中“创建默认”按钮是具有默认颜色的普通按钮,“从设备读取”按钮是我的特殊按钮,背景颜色设置为SystemColors.Control。为什么两种颜色不同?
当使用上面的代码使用任何背景颜色绘制我的控件时,按钮周围似乎有一个边框,我不想要。例如,在上图中,“从设备读取”按钮具有相当粗的边框,显示为控件颜色。
使用基础Button.Enabled = false绘制我的控件时,颜色与禁用按钮的默认颜色颜色不同。您可以在下面的图片中看到。与“保存到计算机”按钮相比,“写入设备”控件的颜色太暗,两者都具有Enabled = false。
答案 0 :(得分:1)
请考虑以下注意事项:
将BackColor
原因设置Button
的{{1}}属性设置为UseVisualStyleBackColor
,并且您在正常按钮和自定义按钮之间看到的差异是因为这个的。要解决此问题,请在将false
重置为UseVisualStyleBackColor
后再次将BackColor
设置为true。
如果您不喜欢该边框自行绘制按钮或使用SystemColors.Control
设置为FlatStyle
并使用Flat
或任何其他外观和边框大小你更喜欢。
与第一名相同。
根据背景颜色计算已禁用的FlatAppearance.BorderSize = 0
的前景色。因此,如果您按照第一项所述重置背景颜色,您将看不出任何差异。