当 DropdownStyle 为 DropDownList 时,如何更改 ComboBox 的背景颜色?
How to change the BackColor of a ComboBox when DropdownStyle is DropDownList?
当 DropdownStyle
属性 为 DropdownList
时,我正在尝试更改 ComboBox
的显示颜色。当 属性 从 DropdownList
更改为 Dropdown
时,颜色会发生变化。
如何控制下拉框的视图颜色?
谢谢
可以设置FlatStyle
property to Popup
。这样,背景颜色将在 DropDown
和 DropDownList
模式下使用。
如果您不喜欢扁平化风格或者您需要对 ComboBox
的渲染进行更多自定义,您可以使用自画 ComboBox
。例如,您可以设置 DrawMode
property to OwnerDrawFixed
and handle DrawItem
事件并根据您的逻辑绘制组合框。
您可能还对以下自定义 ComboBox 的帖子感兴趣:
就像上面提到的;您可以将 FlatStyle 属性 设置为 Popup/Flat。这样背景颜色将在 DropDown 和 DropDownList 模式下使用。
但这样一来,您将不会拥有预期的外观。
我有一个技巧,我创建一个面板并将其边框 属性 更改为 FixedSingle。根据需要更改面板的颜色,然后更改其大小 属性 以匹配您的 ComboBox 的大小。例如到 80、22。
在您拥有 ComboBox 的位置,放置您的面板。
将您的组合框放在面板上。
如果你能微调它的位置,调试的时候,你会发现你的ComboBox看起来像有边框。
几年来我一直在使用堆栈溢出,但没有订阅或贡献。这是我寻找解决方案时的首选,因为它通常会提供解决方案,而且我无需缩放即可阅读。 81 岁的我已经变成化石了,但“灭绝还是一种乐趣”。
谢谢,奥格登纳什。
当对文本应用背景阴影时,降低的对比度使我的老眼难以阅读。我用谷歌搜索了这个问题,所提供的解决方案把我吓跑了。
我什至考虑过使用图形来拼凑功能,但我需要几个实例。一定有办法。
用文本框覆盖组合框的文本部分,并将文本框更改为多行,使其高度与组合框匹配。添加几个事件处理程序,Bob 就是你的叔叔。
Private Sub cmbPoints_SelectedIndexChanged(sender As Object, e As EventArgs
)HandlescmbPoints.SelectedIndexChanged
' Make the selection visible in the textbox
txtPoints.Text = cmbPoints.Text
End Sub
Private Sub txtPoints_GotFocus(sender As Object, e As EventArgs
) Handles txtPoints.GotFocus
' Prevent the user changing the text.
cmbPoints.Focus()
End Sub
我创建了自己的用户控件。您必须将下拉菜单设置为 Flatstyle=Flat 并更改 Backcolor=White。然后下面的代码将绘制缺少的边框。下面是代码和它的外观图片。您可以将其复制并粘贴到您自己的命名空间中的某处,并根据您的喜好命名。
注意:您需要添加System.Windows.Forms; System.ComponentModel;并且 System.Drawing;到你的 Class.
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing;
public class KDCombo : ComboBox
{
public KDCombo()
{
BorderColor = Color.DimGray;
}
[Browsable(true)]
[Category("Appearance")]
[DefaultValue(typeof(Color), "DimGray")]
public Color BorderColor { get; set; }
private const int WM_PAINT = 0xF;
private int buttonWidth = SystemInformation.HorizontalScrollBarArrowWidth;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_PAINT)
{
using (var g = Graphics.FromHwnd(Handle))
{
// Uncomment this if you don't want the "highlight border".
/*
using (var p = new Pen(this.BorderColor, 1))
{
g.DrawRectangle(p, 0, 0, Width - 1, Height - 1);
}*/
using (var p = new Pen(this.BorderColor, 2))
{
g.DrawRectangle(p, 0, 0, Width , Height );
}
}
}
}
}
当 DropdownStyle
属性 为 DropdownList
时,我正在尝试更改 ComboBox
的显示颜色。当 属性 从 DropdownList
更改为 Dropdown
时,颜色会发生变化。
如何控制下拉框的视图颜色?
谢谢
可以设置FlatStyle
property to Popup
。这样,背景颜色将在 DropDown
和 DropDownList
模式下使用。
如果您不喜欢扁平化风格或者您需要对 ComboBox
的渲染进行更多自定义,您可以使用自画 ComboBox
。例如,您可以设置 DrawMode
property to OwnerDrawFixed
and handle DrawItem
事件并根据您的逻辑绘制组合框。
您可能还对以下自定义 ComboBox 的帖子感兴趣:
就像上面提到的;您可以将 FlatStyle 属性 设置为 Popup/Flat。这样背景颜色将在 DropDown 和 DropDownList 模式下使用。
但这样一来,您将不会拥有预期的外观。 我有一个技巧,我创建一个面板并将其边框 属性 更改为 FixedSingle。根据需要更改面板的颜色,然后更改其大小 属性 以匹配您的 ComboBox 的大小。例如到 80、22。 在您拥有 ComboBox 的位置,放置您的面板。 将您的组合框放在面板上。 如果你能微调它的位置,调试的时候,你会发现你的ComboBox看起来像有边框。
几年来我一直在使用堆栈溢出,但没有订阅或贡献。这是我寻找解决方案时的首选,因为它通常会提供解决方案,而且我无需缩放即可阅读。 81 岁的我已经变成化石了,但“灭绝还是一种乐趣”。 谢谢,奥格登纳什。
当对文本应用背景阴影时,降低的对比度使我的老眼难以阅读。我用谷歌搜索了这个问题,所提供的解决方案把我吓跑了。 我什至考虑过使用图形来拼凑功能,但我需要几个实例。一定有办法。
用文本框覆盖组合框的文本部分,并将文本框更改为多行,使其高度与组合框匹配。添加几个事件处理程序,Bob 就是你的叔叔。
Private Sub cmbPoints_SelectedIndexChanged(sender As Object, e As EventArgs
)HandlescmbPoints.SelectedIndexChanged
' Make the selection visible in the textbox
txtPoints.Text = cmbPoints.Text
End Sub
Private Sub txtPoints_GotFocus(sender As Object, e As EventArgs
) Handles txtPoints.GotFocus
' Prevent the user changing the text.
cmbPoints.Focus()
End Sub
我创建了自己的用户控件。您必须将下拉菜单设置为 Flatstyle=Flat 并更改 Backcolor=White。然后下面的代码将绘制缺少的边框。下面是代码和它的外观图片。您可以将其复制并粘贴到您自己的命名空间中的某处,并根据您的喜好命名。
注意:您需要添加System.Windows.Forms; System.ComponentModel;并且 System.Drawing;到你的 Class.
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing;
public class KDCombo : ComboBox
{
public KDCombo()
{
BorderColor = Color.DimGray;
}
[Browsable(true)]
[Category("Appearance")]
[DefaultValue(typeof(Color), "DimGray")]
public Color BorderColor { get; set; }
private const int WM_PAINT = 0xF;
private int buttonWidth = SystemInformation.HorizontalScrollBarArrowWidth;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_PAINT)
{
using (var g = Graphics.FromHwnd(Handle))
{
// Uncomment this if you don't want the "highlight border".
/*
using (var p = new Pen(this.BorderColor, 1))
{
g.DrawRectangle(p, 0, 0, Width - 1, Height - 1);
}*/
using (var p = new Pen(this.BorderColor, 2))
{
g.DrawRectangle(p, 0, 0, Width , Height );
}
}
}
}
}