【问题标题】:C# Winforms ListBox Set BackColor when item meets conditionC# Winforms ListBox在项目满足条件时设置BackColor
【发布时间】:2013-06-03 22:47:03
【问题描述】:

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

【问题讨论】:

    标签: c# winforms collections listbox


    【解决方案1】:

    感谢 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);
                }
              }
            }
          }
        }
    

    【讨论】:

      【解决方案2】:

      下面试试

      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 
      }
      

      【讨论】:

      • 这不起作用,但您通过提供“作为类别”拯救了我,谢谢,我支持您并发布解决方案
      【解决方案3】:

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

      Background color of a ListBox item (winforms)

      【讨论】:

      • 我不是在为着色而苦苦挣扎,而是在获得满足集合标准的 ListBox 项
      • 我不确定你的意思。你不能简单地做一个foreach (Categorie c in categorien) if (c.ID = someID) ...吗?而listBox1.Items 集合只会包含类别实例。
      • 当然我可以迭代集合但是我如何获得相应的 ListBox 项目来改变它的 BackColor ?
      • WinForms 中没有 ListBoxItem。没有可以简单地设置背景颜色的对象。请参阅我发布的链接中的讨论。为了做您想做的事,您必须从 ListBox 中捕获 DrawItem 事件。您将从传递给该事件处理程序的 DrawItemEventArgs 中读取项目索引。然后,您可以从 ListBox.Items 集合中获取 Categorie 项,并对其进行评估以确定要绘制的颜色。
      • 或者使用 ListView 代替,它允许您通过在 ListViewItem 上设置属性来控制每个项目的背景颜色。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 2017-04-09
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多