【发布时间】: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;
}
}
}
这有几个问题:
当我的控件启用且未处于特殊模式时,与其他按钮相比,绘制按钮的控件颜色似乎太浅。您可以在下图中看到这一点,其中“创建默认值”按钮是具有默认颜色的普通按钮,而“从设备读取”按钮是我的特殊按钮,背景颜色设置为 SystemColors.Control。为什么两种颜色不一样?
当我的控件使用上面的代码以任何背景颜色绘制时,按钮周围似乎有一个我不想要的边框。例如,在上图中,“从设备读取”按钮有一个相当粗的边框,看起来像是控件颜色。
当我的控件使用底层 Button.Enabled = false 绘制时,颜色与禁用按钮的默认颜色不同。你可以在下图中看到。与“保存到计算机”按钮相比,“写入设备”控件的颜色太暗,两者都已启用 = false。
- 禁用的控件具有错误的前景文本颜色。如何利用基类的机制正确绘制文本/背景/边框/等?
【问题讨论】:
标签: c# winforms button background border