【WinForm】下拉框ComboBox绘制颜色选项

636 阅读1分钟

效果:

首先,需要将绘制模式设置为手动绘制,绑定绘制方法,添加颜色

//设置手动绘制
cmb.DrawMode = DrawMode.OwnerDrawFixed;
cmb.DropDownStyle = ComboBoxStyle.DropDownList;
cmb.DrawItem += cmb_DrawItem;

cmb.Items.Add(Color.Red);
cmb.Items.Add(Color.Green);
cmb.Items.Add(Color.Blue);

//选择第一个
cmb.SelectedIndex = 0;

添加一个方法,将颜色转为中文显示

private string ColorToChineseString(Color color)
{
    string str = string.Empty;

    if (color == Color.Red)
    {
        str = "红色";
    }
    else if (color == Color.Green)
    {
        str = "绿色";
    }
    else if (color == Color.Blue)
    {
        str = "蓝色";
    }
    else
    {
        str = color.Name;
    }

    return str;
}

绘制方法

private void cmb_DrawItem(object sender, DrawItemEventArgs e)
{
    //选中项
    e.DrawBackground();
    e.DrawFocusRectangle();

    if (e.Index < 0)
        return;

    ComboBox cmb = (ComboBox)sender;

    Color color = (Color)cmb.Items[e.Index];
    //画笔
    SolidBrush brush = new SolidBrush(color);

    Graphics g = e.Graphics;

    Rectangle rect = e.Bounds;

    rect.Inflate(-2, -2);

    Rectangle rectColor = new Rectangle(rect.Location, new Size(20, rect.Height));
    //绘制边框
    g.DrawRectangle(new Pen(e.ForeColor), rectColor);
    //填充颜色
    g.FillRectangle(brush, rectColor);
    //绘制文本
    g.DrawString(ColorToChineseString(color), new Font("宋体", 9), new SolidBrush(e.ForeColor), (rect.X + 22), rect.Y);
}