1

我有一个集合,它是 ListBox 的数据源。当集合项具有特定属性时,我想枚举 ListBox 项并更改 BackColor。for 中的代码根本不起作用,我迷路了。如果相应的类别具有特定的 ID,我将如何更改 BackColor?

  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;
    }
  }
4

3 回答 3

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 
}
于 2013-06-07T15:59:25.557 回答
0

感谢 Damith 的建议(请支持他),我在这里发布了当用户单击带有产品的 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);
            }
          }
        }
      }
    }
于 2013-06-07T21:42:17.700 回答
0

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

ListBox 项的背景颜色(winforms)

于 2013-06-07T15:12:34.257 回答