如何更改组合框背景颜色(不仅仅是下拉列表部分)

JBB*_*JBB 22 .net winforms

在Windows 7上运行的winform应用程序中,我希望更改组合框的背景颜色以突出显示它.comboxbox的DropDownStyle为DropDownList.

当我以编程方式将BackColor属性更改为红色时,只有实际下拉列表的背景更改为红色.当未打开下拉列表时,显示所选值的组合框背景保持灰色.我能做什么,它也变红了?

在Windows XP上运行应用程序时,设置BackColor属性可正常工作

Igb*_*man 19

这应该让你开始.

将组合框DrawMode属性更改为OwnerDrawFixed,并处理DrawItem事件:

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    int index = e.Index >= 0 ? e.Index : 0;
    var brush = Brushes.Black;
    e.DrawBackground();
    e.Graphics.DrawString(comboBox1.Items[index].ToString(), e.Font, brush, e.Bounds, StringFormat.GenericDefault);
    e.DrawFocusRectangle();
}
Run Code Online (Sandbox Code Playgroud)

背景颜色是正确的,但盒子的风格将是平的,而不是通常的3D风格.

  • 谢谢,这是一个良好的开端.有谁知道如何改变背景颜色并保留3D风格? (6认同)

bam*_*ams 8

由于你无论如何都会因为Igby Largeman的解决方案而失去3D效果,所以最好将FlatStyle属性更改为Flat.即使在Windows 7中也似乎遵循背景颜色,并且没有重新实现任何低级事件.

我认为这是微软的一个错误......


小智 5

我玩了一段时间,不想做任何太复杂的事情。上面的那些想法可能有效,但我所做的只是将 flatStyle 属性从“标准”更改为“平面”。

虽然不完美,但它至少将灰色/禁用外观的背景更改为白色。

您可以在此处查看比较:

加热源 #1 > DropdownList > flat(因为下拉菜单允许用户输入错误数据,所以最终决定)

加热器源 #2 > 下拉 > 标准(默认看起来不错)

房屋类型 > 下拉菜单 > 平面

热源 #1 供应商 > 下拉列表 > 标准(默认看起来禁用灰色)

在此处输入图片说明

  • 我的表单背景颜色是白色,当我将 FlatStyle 设置为 Flat 时,我真的不喜欢 Combobox 如何混合到背景中,所以我这样做是为了让它看起来更好......我在表单中添加了一个标签,将 Label 的 BorderStyle 设置为 FixedSingle,将 AutoSize 设置为 False,然后右键单击它并选择“Send to Back”,然后我将 Label 的大小调整为比 Combobox 稍大,并将 Label 放在 Combobox 后面,现在看起来好的。 (2认同)