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;
}
}
}
这有几个问题:
当我的控件启用且未处于特殊模式时,与其他按钮相比,绘制按钮的控件颜色似乎太浅。您可以在下图中看到这一点,其中 "Create Default" 按钮是具有默认颜色的普通按钮,而 "Read From Device" 按钮是我的特殊按钮,背景颜色设置为 SystemColors.Control。为什么两种颜色不一样?
当使用上面的代码用任何背景颜色绘制我的控件时,按钮周围似乎有一个边框,这是我不想要的。例如,在上图中,"Read From Device" 按钮有一个相当粗的边框,似乎是控件颜色。
当我的控件使用底层 Button.Enabled = false 绘制时,颜色与禁用按钮的默认颜色不同。您可以在下图中看到。与 "Save To Computer" 按钮相比,"Write To Device" 控件的颜色太暗,两者都已启用 = false。
- 禁用的控件的前景文本颜色错误。我如何利用基础 class' 机制正确绘制 text/background/border/etc?
考虑这些注意事项:
设置 BackColor
属性 的 Button
导致设置 UseVisualStyleBackColor
到 false
和你看到的差异普通按钮和您的自定义按钮是因为这个。要解决此问题,您应该在将 BackColor
重置为 SystemColors.Control
后再次将 UseVisualStyleBackColor
设置为 true。
如果您不喜欢那个边框,请自己绘制按钮或使用 FlatStyle
设置为 Flat
并使用 FlatAppearance.BorderSize = 0
或任何其他外观和边框-你喜欢的尺寸。
同第一个
禁用Button
的前景色是根据背景色计算的。因此,如果您按照第一条所述重新设置背景色,您将看不出有什么不同。
我有一个派生自 Button 的 CustomControl。在这个控件生命的某些时刻,我想将它的背景设置为特殊颜色(即梅花)或普通控件颜色(与其他按钮的默认颜色相同)。这是最有效的相关代码。
public partial class MySpecialButton : Button
{
private void SetButtonState()
{
if (isSpecial && Enabled)
{
BackColor = Color.Plum;
}
else
{
BackColor = Enabled ? SystemColors.Control : SystemColors.ControlDark;
}
}
}
这有几个问题:
当我的控件启用且未处于特殊模式时,与其他按钮相比,绘制按钮的控件颜色似乎太浅。您可以在下图中看到这一点,其中 "Create Default" 按钮是具有默认颜色的普通按钮,而 "Read From Device" 按钮是我的特殊按钮,背景颜色设置为 SystemColors.Control。为什么两种颜色不一样?
当使用上面的代码用任何背景颜色绘制我的控件时,按钮周围似乎有一个边框,这是我不想要的。例如,在上图中,"Read From Device" 按钮有一个相当粗的边框,似乎是控件颜色。
当我的控件使用底层 Button.Enabled = false 绘制时,颜色与禁用按钮的默认颜色不同。您可以在下图中看到。与 "Save To Computer" 按钮相比,"Write To Device" 控件的颜色太暗,两者都已启用 = false。
- 禁用的控件的前景文本颜色错误。我如何利用基础 class' 机制正确绘制 text/background/border/etc?
考虑这些注意事项:
设置
BackColor
属性 的Button
导致设置UseVisualStyleBackColor
到false
和你看到的差异普通按钮和您的自定义按钮是因为这个。要解决此问题,您应该在将BackColor
重置为SystemColors.Control
后再次将UseVisualStyleBackColor
设置为 true。如果您不喜欢那个边框,请自己绘制按钮或使用
FlatStyle
设置为Flat
并使用FlatAppearance.BorderSize = 0
或任何其他外观和边框-你喜欢的尺寸。同第一个
禁用
Button
的前景色是根据背景色计算的。因此,如果您按照第一条所述重新设置背景色,您将看不出有什么不同。