【问题标题】:Varying ListViews item background color改变 ListViews 项目背景颜色
【发布时间】:2023-03-28 14:03:02
【问题描述】:

如何使 ListViews 控件的项目背景颜色因项目而异,就像在 WinAmp 中一样,同时更改列标题颜色?

如果您仔细观察,您会发现第一项是深灰色,第二项是黑色,依此类推。

【问题讨论】:

  • 恭喜播放列表:)

标签: c# listview


【解决方案1】:

您可以设置ListViewItem.BackColor 属性,但是必须为每条交替行手动完成。或者,您可以使用具有 AlternateRowStyle 属性的 DataGridView 可以自动执行此操作 - 尽管您需要将行数据绑定到一个完全不同的主题集合中。

对于简单的情况:

foreach (ListViewItem item in listView1.Items)
{
    item.BackColor = item.Index % 2 == 0 ? Color.Red : Color.Black;
}

【讨论】:

  • 如果要绘制一个空列表视图应该怎么做
【解决方案2】:

处理列表框上的DrawItem 事件并将DrawMode 设置为OwnerDrawVariableDrawItemEventArgs 提供了一个 BackColor 属性,可以根据索引(也在 arg 中)进行设置。

【讨论】:

    【解决方案3】:

    我认为您在循环中添加行(子项)?如果是这样,请使用循环计数器来确定您想要哪种颜色。

    string[] strings = new string[]{"dild", "dingo"};
    int i = 0;
    foreach (var item in strings)
    {
        Color color = i++ % 2 == 0 ? Color.LightBlue :  Color.LightCyan;
        ListViewItem lv = listView1.Items.Add(item);
        lv.SubItems[0].BackColor = color;
    }
    

    【讨论】:

      【解决方案4】:
      private static void RepaintListView(ListView lw)
      {
          var colored = false;
          foreach (ListViewItem item in lw.Items)
          {
              item.BackColor = colored ? Color.LightBlue : Color.White;
              colored = !colored;
          }
      }
      

      您可以在添加项目后调用此方法。或者直接在add上使用

      【讨论】:

        【解决方案5】:
        for (int index = 0; index <= ListView1.Items.Count; index++) 
        {
            if (index % 2 == 0) 
            {
                ListView1.Items(index).BackColor = Color.LightGray;
            }
        
        }
        

        【讨论】:

        • 在您的代码中,首先所有项目都将被绘制成单色,然后 - 其中 1/2 将被重新绘制。我猜这不是很有效。所以最好在添加时绘制它们,即只画一次。
        • 是的!我同意......只是我在 ListView 中找不到 Item Add 的事件...... Item Paint 和 Sub Item Paint 事件似乎没有触发......
        猜你喜欢
        • 2012-03-10
        • 1970-01-01
        • 2023-01-17
        • 2012-04-02
        • 1970-01-01
        • 1970-01-01
        • 2013-07-20
        相关资源
        最近更新 更多