当ComboBox
属性为DropdownStyle
时,我正在尝试更改DropdownList
的显示颜色。当属性从Dropdown
更改为DropdownList
时,颜色会发生变化。
如何控制下拉框的视图颜色?
由于
答案 0 :(得分:11)
您可以将FlatStyle
属性设置为Popup
。这样,背面颜色将同时用于DropDown
和DropDownList
模式。
如果您不喜欢平面样式,或者在渲染ComboBox
时需要更多自定义,则可以使用所有者绘制的ComboBox
。例如,您可以将DrawMode
属性设置为OwnerDrawFixed
并处理DrawItem
事件,并根据您的逻辑绘制组合框。
答案 1 :(得分:2)
就像上面提到的一样;您可以将FlatStyle属性设置为Popup / Flat。这样,在DropDown和DropDownList模式下都可以使用背景色。
但是那样的话,您将不会拥有预期的外观。 我有一个技巧,可以创建面板并将其border属性更改为FixedSingle。将面板的颜色更改为所需的颜色,然后更改其size属性以匹配ComboBox的大小。例如80、22。 在放置组合框的位置,放置面板。 将您的组合框放在面板上。 如果您可以微调其位置,则在调试时,您会发现ComboBox看起来像是有边框的。
答案 2 :(得分:1)
我使用堆栈溢出已经有两年了,没有订阅或贡献。寻找解决方案是我的第一选择,因为它通常提供解决方案,而且无需缩放即可阅读它。我已经81岁了,是化石,但是“灭绝是一种乐趣。” 谢谢,奥格登·纳什(Ogden Nash)。
当对文本应用背景阴影时,对比度降低会导致我的老眼睛难以阅读它。我用Google搜索了问题,提供的解决方案使我感到震惊。 我什至考虑过使用图形来简化功能,但是我需要几个实例。一定可以。
用文本框覆盖组合框的文本部分,并将文本框更改为多行以使其高度与组合框匹配。添加几个事件处理程序,鲍勃是你的叔叔。
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
答案 3 :(得分:0)
我创建了自己的用户控件。您必须将下拉列表设置为 Flatstyle=Flat 并更改 Backcolor=White。然后下面的代码将绘制缺少的边框。下面是代码和它的外观图片。您可以将其复制并粘贴到您自己的命名空间中的某处,并根据您的喜好命名。
注意:您需要添加 System.Windows.Forms; System.ComponentModel;和 System.Drawing;到你的班级。
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 );
}
}
}
}
}