簡體   English   中英

組合框項目更改字體顏色C#WinForms

[英]combo box items change font color C# WinForms

在組合框中,如果包含*標記,則我想將該項文本顏色更改為不同的顏色。 如果值不包含*我不需要更改該項文本顏色。 我該怎么做?

你可以做到這一點

創建一個包含兩個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循環將它們添加到列表中並填充列表類。

下面的代碼,檢查當前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
       }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM