我有一个集合,它是ListBox的DataSource。 我想枚举ListBox项并在集合项具有特定属性时更改BackColor。 for中的代码根本不起作用,我迷路了。 我如何更改BackColor是否相应的分类具有一定的ID?
categorien.Add(new Categorie() { ID = 0, Naam = "Blond" });
categorien.Add(new Categorie() { ID = 1, Naam = "Donker" });
listBox1.DataSource = categorien;
listBox1.DisplayMember = "Naam";
listBox1.ValueMember = "ID";
for (int i = 0; i < listBox1.Items.Count; i++ ) {
if (categorien.ID == someID) {
listBox1.Items[i].BackColor = Color.Gray;
}
}
答案 0 :(得分:4)
尝试以下
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
var category = listBox1.Items[e.Index] as Categorie;
Color backColor = Color.Green;
if (category.ID == someID)
{
backColor = Color.Gray;
}
// draw back color and text
}
答案 1 :(得分:0)
为列表框中的特定项目着色要多做一些工作。请参阅下面的讨论。
答案 2 :(得分:0)
感谢Damith的建议(请点赞他)这里的sollution,我发布了当用户点击带产品的dataGridView时执行的方法,然后在列表框中选择相应的类别。
private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) {
listBox1.ClearSelected();
if (dataGridView1.SelectedRows.Count == 1){
List<CatProd> catProdLijst = catprod.Where(c => c.ProdID ==
(int)dataGridView1.SelectedRows[0].Cells["ID"].Value).ToList();
foreach (CatProd cp in catProdLijst) {
for (int i = 0; i < listBox1.Items.Count; i++) {
var category = listBox1.Items[i] as Categorie;
if (category.ID == cp.CatID) {
listBox1.SetSelected(i, true);
}
}
}
}
}