如何从ListView组件c#中删除组中的所有项目

时间:2013-06-21 09:01:01

标签: c# .net winforms listview

我正在尝试从ListView组件(C#.NET 4.0)中的ListViewGroup中删除所有项目。我尝试过以下的事情,但他们会回归意想不到的行为。

    listView1.Groups[4].Items.Clear(); // Does only remove the item from the group, 
                                       // but is then placed in a new Default group.

foreach (ListViewItem item in listView1.Groups[4].Items)
{ 
    item.Remove(); 
}
// This throws an error which says that the list is changed.

我现在使用listView1.Items.Clear();清除组中的所有项目,并逐个读取它们。但是,这会导致我的GUI在执行此操作时闪烁。我想知道如何删除组中的所有项目。所以我只需要重新添加项目组(我想要的,因为项目数量不同,名称和子项目也不同)。

注意:该组名为lvgChannels,索引为4.

2 个答案:

答案 0 :(得分:1)

试试这个:

List<ListViewItem> remove = new List<ListViewItem>();

        foreach (ListViewItem item in listView1.Groups[4].Items)
        {
            remove.Add(item);
        }

        foreach (ListViewItem item in remove)
        {
            listView1.Items.Remove(item);
        }
    }

第二个陈述的问题在于您从正在迭代的列表中删除了一个项目。

答案 1 :(得分:1)

您需要的是从列表视图中删除该组中列出的所有项目的项目。

for (int i = listView1.Groups[4].Items.Count; i > 0; i--)
{
    listView1.Items.Remove(listView1.Groups[4].Items[i-1]);
}

您的代码的问题在于您正在执行增量而不是减量。每次移除一个项时,计数递减,因此for循环应从最大计数开始并递减为0.