在ComboBox-颜色选择器中显示颜色列表

时间:2019-11-23 12:42:14

标签: c# .net winforms combobox

]想用所有颜色的列表填充我的ComboBox。我期待着这样的事情:

CBcolor.DataSource = AllColor;

然后,我想像这样使用ComboBox:

Color selected = CBcolor.selectedvalue;   
C_ObjetGraphique cercle = new dessin.Cercle(e.Location, selected, selected, 100);
cercle.Affiche();
ledessin.ajoute(cercle);

如何将ComboBox中的颜色列表显示为颜色选择器?

1 个答案:

答案 0 :(得分:2)

通常,您需要将颜色列表设置为组合框的数据源。您可能会列出一些预定义的颜色,例如Color.Red,Color.Green,Color.Blue;。您可以依靠KnownColor,也可以使用反射来获得Color类型的Color属性。

在此示例中,我使用Color类型的颜色属性来显示如下所示的组合框:

Show List of Colors in ComboBox

获取颜色列表并设置组合框的数据源:

comboBox1.DataSource = typeof(Color).GetProperties()
    .Where(x => x.PropertyType == typeof(Color))
    .Select(x => x.GetValue(null)).ToList();

处理组合框的自定义绘图:

comboBox1.MaxDropDownItems = 10;
comboBox1.IntegralHeight = false;
comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox1.DrawItem += comboBox1_DrawItem;

然后comboBox1_DrawItem

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    e.DrawBackground();
    if (e.Index >= 0)
    {
        var txt = comboBox1.GetItemText(comboBox1.Items[e.Index]);
        var color = (Color)comboBox1.Items[e.Index];
        var r1 = new Rectangle(e.Bounds.Left + 1, e.Bounds.Top + 1,
            2 * (e.Bounds.Height - 2), e.Bounds.Height - 2);
        var r2 = Rectangle.FromLTRB(r1.Right + 2, e.Bounds.Top,
            e.Bounds.Right, e.Bounds.Bottom);
        using (var b = new SolidBrush(color))
            e.Graphics.FillRectangle(b, r1);
        e.Graphics.DrawRectangle(Pens.Black, r1);
        TextRenderer.DrawText(e.Graphics, txt, comboBox1.Font, r2,
                comboBox1.ForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
    }
}

从组合框中获取所选颜色:

if(comboBox1.SelectedIndex>=0)
    this.BackColor = (Color)comboBox1.SelectedValue);