[英]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.