You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为C# WinForms ComboBox的各行设置不同文本颜色?

WinForms ComboBox 实现每行不同文本颜色的解决方案

你之前的做法错误在于直接修改ComboBox的ForeColor属性——这是全局设置,所有项都会继承最后一次设置的颜色,自然没法单独控制每行。要实现每行不同颜色,必须通过**自绘(Owner-Draw)**的方式来处理。

步骤1:准备绑定数据的类

先定义一个类,用来存储每个项的文本和对应的颜色:

public class AlignmentItem
{
    public string Text { get; set; }
    public Color TextColor { get; set; }
}

步骤2:修改项的添加逻辑

不再直接添加字符串,而是添加AlignmentItem实例,把文本和对应颜色绑定:

int i = 0;
foreach (bool Is_Aligned in Selected_Class.Allowed_Alignment)
{
    Color itemColor = Is_Aligned ? Color.Green : Color.Red;
    Alignment_Selection.Items.Add(new AlignmentItem
    {
        Text = Build.Alignment.Alignment_List[i],
        TextColor = itemColor
    });
    i++;
}

步骤3:设置ComboBox的DrawMode

在设计器里把ComboBox的DrawMode属性改为OwnerDrawFixed,或者通过代码设置:

Alignment_Selection.DrawMode = DrawMode.OwnerDrawFixed;

步骤4:处理DrawItem事件

给ComboBox添加DrawItem事件处理方法,手动绘制每个项的文本和颜色:

private void Alignment_Selection_DrawItem(object sender, DrawItemEventArgs e)
{
    if (e.Index < 0) return;

    ComboBox comboBox = sender as ComboBox;
    AlignmentItem item = comboBox.Items[e.Index] as AlignmentItem;

    // 绘制项的背景
    e.DrawBackground();

    // 用对应颜色绘制文本
    using (SolidBrush textBrush = new SolidBrush(item.TextColor))
    {
        e.Graphics.DrawString(item.Text, e.Font, textBrush, e.Bounds);
    }

    // 绘制焦点边框(可选)
    e.DrawFocusRectangle();
}

补充说明

  • 如果你的ComboBox是DropDown模式(允许手动输入),还需要额外处理编辑框的显示;如果是DropDownList模式,以上代码即可正常工作。
  • 自绘方式的核心是通过DrawItem事件逐个控制每个项的绘制逻辑,这是WinForms中实现自定义列表项样式的标准方式。

内容的提问来源于stack exchange,提问作者Desdar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:02:42