在组合框中,如果包含*标记值,我想将该项文本颜色更改为不同的颜色。 如果值不包含*我不需要更改该项文本颜色。 我该怎么办?
答案 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
}
}
}