C#如何更改组合框项目的颜色

本文关键字:项目 颜色 组合 何更改 | 更新日期: 2023-09-27 18:29:46

winform上的组合框,组合框填充数据表三列(id、名称、状态)

combobox.displaymember = "name";
combobox.valuemember = "id";

我想更改状态列的组合框项目的颜色

请提供建议。

C#如何更改组合框项目的颜色

我能做到这一点,但有一个错误。先走几步。

  1. 在表单中添加组合框(comboBox1)
  2. 将comboBox1的DrawItem事件更改为comboBox1_DrawItem(我们的方法如下)
  3. EDIT:将组合框1的Draw Mode属性更改为OwnerDrawFixedOwnerDrawVariable
  4. 执行comboBox1_DrawItem。注意,我在ComboBoxValue.Status 上切换了画笔

    private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
    {  
        Brush brush;
        var g = e.Graphics;
        var rect = e.Bounds;
        var n = "";
        var f = new Font("Arial", 9, FontStyle.Regular);
        switch (((ComboBoxValue)((ComboBox)sender).SelectedItem).Status)
        {
            case "one":
                brush = Brushes.Red;
                break;
            case "two":
                brush = Brushes.Green;
                break;
            default:
                brush = Brushes.White;
                break;
        }
        if (e.Index >= 0)
        {
            n = ((ComboBoxValue)((ComboBox)sender).SelectedItem).Name;
        }
        g.FillRectangle(brush, rect.X, rect.Y,rect.Width, rect.Height);
        g.DrawString(n, f, Brushes.Black, rect.X, rect.Y);
    }
    
  5. 我使用了自己类的IList作为数据源。你的就不一样了。

    public class ComboBoxValues : System.Collections.ObjectModel.Collection<ComboBoxValue>
    {
        public ComboBoxValues()
        {
            this.Add(new ComboBoxValue
            {
                Name = "chad",
                Id = 123,
                Status = "one"
            });
            this.Add(new ComboBoxValue
            {
                Name = "different chad",
                Id = 123,
                Status = "two"
            });
        }
    }
    public class ComboBoxValue
    {
        public string Name { get; set; }
        public int Id { get; set; }
        public string Status { get; set; }
    }
    
  6. 设置DataSource

    comboBox1.DataSource = new ComboBoxValues();
    comboBox1.DisplayMember = "Name";
    comboBox1.ValueMember = "Id";
    

正如你很快就会看到的那样,这个错误是,由于某种原因,颜色似乎只有在你把鼠标放在它们上面之后才会改变。也许在我回到这之前,其他人会意识到这个错误。祝你好运