C#Winforms ListBox当项目满足条件时设置BackColor

时间:2013-06-07 15:05:53

标签: c# winforms collections listbox

我有一个集合,它是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;
    }
  }

3 个答案:

答案 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)

为列表框中的特定项目着色要多做一些工作。请参阅下面的讨论。

Background color of a ListBox item (winforms)

答案 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);
            }
          }
        }
      }
    }
相关问题