组合框项目更改字体颜色C#WinForms

时间:2014-03-12 10:34:36

标签: c# winforms combobox

在组合框中,如果包含*标记值,我想将该项文本颜色更改为不同的颜色。 如果值不包含*我不需要更改该项文本颜色。 我该怎么办?

2 个答案:

答案 0 :(得分:2)

你可以这样做

创建一个包含两个exmaple属性的类

public class Product
{
    public string ProductName { get; set; }
    public Int32 ProductStatus { get; set; }
}

然后在表单加载

列表中添加项目
private void Form1_Load(object sender, EventArgs e)
        {
          List<Product> listPdt = new List<Product>();

          Product pdt = new Product();
          pdt.ProductName = "Product 1";
          pdt.ProductStatus = 1;
          listPdt.Add(pdt);

          Product pdt1 = new Product();
          pdt1.ProductName = "Product 1*";
          pdt1.ProductStatus = 1;
          listPdt.Add(pdt1);

          Product pdt2 = new Product();
          pdt2.ProductName = "Product 2";
          pdt2.ProductStatus = 1;
          listPdt.Add(pdt2);

          Product pdt3 = new Product();
          pdt3.ProductName = "Product 2*";
          pdt3.ProductStatus = 1;
          listPdt.Add(pdt3);

          comboBox1.DataSource = listPdt;
          comboBox1.DisplayMember = "ProductName";
          comboBox1.ValueMember = "ProductStatus";     

          // this will fire combo box's draw event.
          comboBox1.DrawMode = DrawMode.OwnerDrawVariable;
        }

现在编写组合框的绘制事件

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            Brush brush = null;
            ComboBox combo;

            try
            {
                e.DrawBackground();

                combo = (ComboBox)sender;
                Product pdt = (Product)combo.Items[e.Index];

                if (pdt.ProductName.Contains("*"))
                {
                    brush = Brushes.Red;
                }
                else
                {
                    brush = Brushes.Black;
                }

                e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
                e.Graphics.DrawString(pdt.ProductName, combo.Font, brush, e.Bounds.X, e.Bounds.Y);
            }
            catch (Exception Ex)
            { 
            }
        }

如果你有来自数据库的列表,那么通过foreach循环将它们添加到列表中并填充列表类。

答案 1 :(得分:1)

以下代码检查当前SelectedItem是否包含* mark,每次在selectedIndexChanges时都会触发事件:

private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if(ComboBox1.SelectedItem.ToString().Contains("*"))
    {
        //Change color here
        ComboBox1.BackColor = Color.Red;
    }
}

如果要在加载表单时遍历ComboBox中的所有项目,请使用以下代码,您可以在其中修改包含* mark的每个项目。

private void Form1_Load(object sender, EventArgs e)
{
    foreach(var item in ComboBox1.Items)
    {
       if(item.ToString().Contains("*"))
       {
           //Modify item color here
       }
    }
}