【问题标题】:Winforms - How to alternate the color of rows in a ListView control?Winforms - 如何交替 ListView 控件中的行颜色?
【发布时间】:2011-02-21 10:38:51
【问题描述】:

使用 C# Winforms (3.5)。

是否可以将行颜色设置为在列表视图中自动交替?

或者每次向列表视图中添加新行时,我是否需要手动设置行颜色?

根据MSDN 文章,手动方法如下所示:

//alternate row color
if (i % 2 == 0)
{
    lvi.BackColor = Color.LightBlue;
}
else
{
    lvi.BackColor = Color.Beige;
}

【问题讨论】:

标签: c# winforms .net-3.5 listview


【解决方案1】:

将 ListView OwnerDraw 属性设置为 true,然后实现 DrawItem 处理程序:

    private void listView_DrawItem(object sender, DrawListViewItemEventArgs e)
    {
        e.DrawDefault = true;
        if ((e.ItemIndex%2) == 1)
        {
            e.Item.BackColor = Color.FromArgb(230, 230, 255);
            e.Item.UseItemStyleForSubItems = true;
        }
    }

    private void listView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
    {
        e.DrawDefault = true;
    }

这个例子很简单,你可以改进一下。

【讨论】:

    【解决方案2】:

    恐怕这是 Winforms 中的唯一方法。 XAML 通过使用样式来实现这一点。

    【讨论】:

      【解决方案3】:

      据我所知,WPF 允许使用<Styles/> 在任何控件上设置样式 但在winforms中,恐怕这是唯一的方法。

      【讨论】:

        【解决方案4】:
                for (int i = 0; i <= listView.Items.Count - 1; i = (i + 2))
                {
                    listView.Items[i].BackColor = Color.Gainsboro;
                }
        

        在属性菜单中设置主背景,然后使用此代码设置备用颜色。

        【讨论】:

          【解决方案5】:

          您还可以利用所有者绘图,而不是显式设置属性。所有者绘图不太容易受到项目重新排序的影响。

          这是在Better ListView(提供免费和扩展版本的第 3 方组件)中执行此操作的方法 - 只需处理 DrawItemBackground 事件即可:

          private void ListViewOnDrawItemBackground(object sender, BetterListViewDrawItemBackgroundEventArgs eventArgs)
          {
              if ((eventArgs.Item.Index & 1) == 1)
              {
                  eventArgs.Graphics.FillRectangle(Brushes.AliceBlue, eventArgs.ItemBounds.BoundsOuter);
              }
          }
          

          结果:

          【讨论】:

            【解决方案6】:

            将 ListView OwnerDraw 属性设置为 true,然后实现 DrawItem 处理程序。看看这里:Winforms - How to alternate the color of rows in a ListView control?

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-12-05
              • 2013-11-06
              • 2011-10-13
              • 1970-01-01
              • 2022-10-05
              相关资源
              最近更新 更多