2014-03-12 83 views
1

在組合框中,如果值包含*標記,我想將該項目文本顏色更改爲不同的顏色。 如果值不包含*我不需要更改該項目的文字顏色。 我該怎麼辦?組合框項目更改字體顏色C#WinForms

+4

你在使用wpf嗎?或winforms?或網絡? –

+0

即時通訊使用C#winforms – Tom

回答

1

下面的代碼,檢查當前SelectedItem包含* mark,事件得到每次射出的selectedIndexChanges:如果你想通過對形式的負載ComboBox中的所有項目迭代

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

,使用下面的代碼,您可以在其中修改每個包含* mark的項目。

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

如何修改項目顏色? – Tom

+0

@ user3230466你想修改什麼顏色,forecolor或backcolor? – Max

+0

我需要改變前面的顏色 – Tom

2

您可以通過此

做作出這樣的包含〔實施例兩個屬性

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循環將它們添加到列表並填充列表類。