C# 如何更改所有combobox元素上combobox的背景色?
我对组合框有点小问题 当组合框中有值时,我需要将它的背景颜色设置为红色 我正在使用以下代码:C# 如何更改所有combobox元素上combobox的背景色?,c#,winforms,combobox,controls,C#,Winforms,Combobox,Controls,我对组合框有点小问题 当组合框中有值时,我需要将它的背景颜色设置为红色 我正在使用以下代码: if (!string.IsNullOrEmpty(ComboTransmis.Text)) ComboTransmis.BackColor = Color.OrangeRed; else ComboTransmis.BackColor = Color.White; 但结果是: 只有文本有背景色,我需要所有元素都有它,我不知道怎么做 如果有人有主意的话 提前感谢您您需要自己修改组合框
if (!string.IsNullOrEmpty(ComboTransmis.Text))
ComboTransmis.BackColor = Color.OrangeRed;
else
ComboTransmis.BackColor = Color.White;
但结果是:
只有文本有背景色,我需要所有元素都有它,我不知道怎么做
如果有人有主意的话
提前感谢您您需要自己修改组合框来实现这一点,但是您会失去3d风格并获得平面效果。 根据答案: 将combobox DrawMode属性更改为OwnerDrawFixed,并处理 DrawItem事件:
我认为,如果我正确理解了这个问题,您需要编写一个自定义控件来实现这一点。另外,为了遍历表单上的每个组合框,您需要指定所有后续容器,并循环遍历它们的每个项。@MasterYoda仅此而已。请看以下问题:。你需要自己修改组合框来实现这一点,但是你失去了3d风格,获得了平面效果。@MasterYoda你最后的评论帮助我!它只需要将
FlatStyle
属性设置为Flat
,并将BackColor
应用于所有元素。谢谢你的光!愿原力与你同在!p、 这个问题可能对你的未来也很有用:)
private void ComboTransmis_DrawItem(object sender, DrawItemEventArgs e)
{
int index = e.Index >= 0 ? e.Index : 0;
var brush = Brushes.Black;
e.DrawBackground();
e.Graphics.DrawString(ComboTransmis.Items[index].ToString(), e.Font, brush, e.Bounds, StringFormat.GenericDefault);
e.DrawFocusRectangle();
}