C# 从多列listView中删除所选行

C# 从多列listView中删除所选行,c#,winforms,listview,C#,Winforms,Listview,我有一个包含两列的listview,我使用上下文菜单允许用户删除选定的行。要删除所选行,我已尝试使用以下代码,但无效: private void toolStripMenuItem1_Click(object sender, EventArgs e) { listView1.SelectedItems.Clear(); } 我怀疑这是因为listview有两列,但我无法找到删除选定行的解决方案。删除所有行可以使用:listView1.Items.Clear()这似乎有效: fo

我有一个包含两列的listview,我使用上下文菜单允许用户删除选定的行。要删除所选行,我已尝试使用以下代码,但无效:

private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
    listView1.SelectedItems.Clear();
}
我怀疑这是因为listview有两列,但我无法找到删除选定行的解决方案。删除所有行可以使用:
listView1.Items.Clear()

这似乎有效:

    for (int i = 0; i < listView1.Items.Count; i++ )
    {

        if (listView1.Items[i].Selected)
        {
            listView1.Items[i].SubItems.Clear();
        }

    }
for(int i=0;i

有没有办法删除项目并重新排序ListVIEW,以便在其他行中间没有空行?

< P>这似乎是一个更好的解决方案:

for (int i = 0; i < listView1.Items.Count; i++ )
{
    if (listView1.Items[i].Selected)
    {
        listView1.Items[i].Remove();
    }
}
for(int i=0;i
您可以做什么:

foreach (ListViewItem Item in LstvClients.Items)
{    
     if (item.Selected)
     {
         LstvClients.Items.Remove(Item);
     }
}

(你的更好,item.Remove())

BeefTurkey的最新示例看起来是正确的,但是他应该在删除所选项目后减少变量
i

for (int i = 0; i < listView1.Items.Count; i++ )
{
    if (listView1.Items[i].Selected)
    {
        listView1.Items[i].Remove();
        i--;
    }
}
for(int i=0;i

删除后,大于
i
的项目索引将减少1。因此,您应该重新定位
i
,以匹配下一个未测试的项。

我一直在使用与其他项稍有不同的方法从ListView控件中删除所有选定项:

while (listBox1.SelectedItems.Count > 0)
{
    listBox1.Items.Remove(listBox1.SelectedItem);
}
foreach (ListViewItem listViewItem in listView1.SelectedItems)
{
    listView1.Items.Remove(listViewItem);
}

我不确定这将如何在性能方面与大列表上发布的其他方法相匹配,但我认为,在没有问题的情况下,它看起来更干净一些。

这是删除所有选定项的正确方法。方法是始终访问索引为0的第一个选定项并循环,直到不再剩下任何选定项。不能安全地引用集合中具有绝对索引的其他项,因为一旦删除其中一个项,索引就会更改

while( listView1.SelectedItems.Count > 0)
{
    listView1.Items.Remove(lvFiles.SelectedItems[0]);
}
do
{ 
this.listView1.CheckedItems[0].Remove();

}而(this.listView1.CheckedItems.Count>0)你能编辑第一篇文章而不是回复两次吗。如果有人当选,你就看不到你的帖子了。或者事实上,这不会移动。你不能在对一个集合进行迭代时弄乱它。这个解决方案就像一个符咒一样有效,到目前为止还没有对我产生影响+1.
 foreach(ListViewItem lvItem in lvDocument.SelectedItems)
 {
      lvDocument.Items.Remove(lvItem);
 }