更改ListView中整个列的颜色

时间:2016-06-18 19:13:10

标签: c# listview

我在ListView中有三列,我想要将第三列中的每个值更改为绿色前景。

用户名,电子邮件,状态

这些是我的三列,所有列也都被命名为。

我尝试了类似的功能,但失败了,因为它只是将它添加到listview中,而不是在第三列值添加到listView时更改它的颜色。

        var Status = new ListViewItem("Status");
        Status.SubItems[0].ForeColor = Color.FromArgb(-16711936);
        Status.UseItemStyleForSubItems = false;

        Pless_ListView.Items.Add(Status);

我也尝试过这么简单的事情,但仍然没有运气。

Pless_ListView.Items[2].ForeColor = Color.Green;

我也尝试过编辑它,将状态值添加到ListView,如下所示。

account.SubItems.Add(Status).ForeColor = Color.Green;

这也没有运气。

我也试图搜索并且没有运气在哪里找到答案。

编辑:

这是我添加到ListView代码。

        void ColorLvColumn(ListView lv, int columnIndex, Color color, bool foreground)
    {
        foreach (ListViewItem lvi in lv.Items)
        {
            lvi.UseItemStyleForSubItems = false;  // allow individual styles for subitems!
            if (columnIndex < lvi.SubItems.Count)
            {
                if (foreground) lvi.SubItems[columnIndex].ForeColor = color;
                //else lvi.SubItems[columnIndex].BackColor = color;
            }
        }
    }

    private void addAccountToPlessLV(String Username, String Password, PlessHTTP captured)
    {
        if (InvokeRequired)
        {
            Invoke(new MethodInvoker(delegate
            {
                ColorLvColumn(Pless_ListView, 2, Color.Green, true);
                ListViewItem account = new ListViewItem { Text = Username };
                account.SubItems.Add(Email);
                account.SubItems.Add(captured.Status).BackColor = Color.Green;
                Pless_ListView.Items.Add(account);
            }));
        }
        else
        {
            ColorLvColumn(Pless_ListView, 2, Color.Green, true);
            ListViewItem account = new ListViewItem { Text = Username };
            account.SubItems.Add(Email);
            account.SubItems.Add(captured.Status)
            Pless_ListView.Items.Add(account);
        }
    }

1 个答案:

答案 0 :(得分:1)

这为列中的每个项目/子项目设置颜色:

void ColorLvColumn(ListView lv, int columnIndex, Color color, bool foreground)
{
    foreach (ListViewItem lvi in lv.Items)
    {
        lvi.UseItemStyleForSubItems = false;  // allow individual styles for subitems!
        if (columnIndex < lvi.SubItems.Count)
        {
            if (foreground) lvi.SubItems[columnIndex].ForeColor = color;
            else lvi.SubItems[columnIndex].BackColor = color;
        }
    }
}

这样称呼:

ColorLvColumn( Pless_ListView, 2, Color.Green, true);

关于代码的两点说明:

  • 我注意到你写了:Status.SubItems[0]第三列是Status.SubItems[2]

  • 要为其着色,您必须先添加缺少的两个子项

可以使用构造函数执行此操作:

ListViewItem.ListViewSubItem lvsi = new ListViewItem.ListViewSubItem();
lvsi.ForeColor = Color.LimeGreen;

并将其添加到Items.SubItems集合中:

someItem.subItems.Addlvsi ();

但添加SubItems(string)重载也同样有效。请注意,必须按顺序添加它们!

请注意,创建Columns不会创建任何SubItems 。它只是创建了一个可以显示SubItems的空间。

这意味着ListViewItems.SubItems是一个锯齿状阵列