【问题标题】:How to change backcolor of combobox on all combobox element?如何更改所有组合框元素上组合框的背景颜色?
【发布时间】:2018-03-24 03:18:29
【问题描述】:

我的组合框有点问题。

当组合框有值时,我需要将组合框的背景颜色设置为红色。

我正在使用以下代码:

if (!string.IsNullOrEmpty(ComboTransmis.Text))
    ComboTransmis.BackColor = Color.OrangeRed;
else
    ComboTransmis.BackColor = Color.White;

但结果是这样的:

只有文本有背景色,我需要所有元素都有它,但我不知道该怎么做。

如果有人有想法?

提前谢谢你

【问题讨论】:

  • 我认为如果我正确理解了这个问题,您需要编写一个自定义控件来执行此操作。附:为了遍历表单上的每个组合框,您需要指定所有后续容器并遍历它们的每个项目。
  • @MasterYoda 就是为了这个
  • 看看这个问题:stackoverflow.com/questions/6468024/…。您需要自己修改组合框以实现此目的,但是您会失去 3d 样式并获得平坦。
  • @MasterYoda 您的最后一条评论对我有帮助!它只需要将FlatStyle 属性设置为Flat 并将BackColor 应用于所有元素。谢谢你的光!愿原力与你同在!

标签: c# winforms combobox controls


【解决方案1】:

您需要自己修改组合框以实现此效果但是您会失去 3d 样式并变得平坦。

基于this 答案:

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

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();
}

【讨论】:

猜你喜欢
  • 2016-07-09
  • 2019-05-15
  • 2018-12-26
  • 2022-01-21
  • 1970-01-01
  • 2018-12-27
  • 2021-01-12
  • 2013-01-27
相关资源
最近更新 更多