使用ListView.Item.RemoveAt()时不会删除指定的项目

Rye*_*Rye 5 c# listview listviewitem winforms

我试图使用该RemoveAt()方法从列表视图中删除特定项目.但当我第一次删除它时,一些物品会留下来.

例如:见下图

替代文字

码:

private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < listView1.Items.Count; i++) 
        {
            if (listView1.Items[i].SubItems[0].Text == "A1") 
            {
                listView1.Items.RemoveAt(i);
            }
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        for(int i = 0; i<3; i++)
        {
            ListViewItem lvi = new ListViewItem("A1");
            lvi.SubItems.AddRange(new string[] {"desc" + i.ToString(), i.ToString()});
            listView1.Items.Add(lvi);
        }

        for (int i = 0; i < 2; i++)
        {
            ListViewItem lvi = new ListViewItem("A2");
            lvi.SubItems.AddRange(new string[] { "desc" + i.ToString(), i.ToString() });
            listView1.Items.Add(lvi);
        }
    }
Run Code Online (Sandbox Code Playgroud)

Ini*_*eer 5

请参阅" 备注"部分中的MSDN.

从集合中删除项目时,索引会更改集合中的后续项目.删除有关已删除项目的所有信息.您可以使用此方法通过指定要从集合中删除的项的索引来从集合中删除特定项.若要指定要删除的项而不是项的索引,请使用Remove方法.要从集合中删除所有项目,请使用"清除"方法.

编辑:请参阅Moot的答案.上面的链接/参考也适用于他/她的答案.

编辑2:

如果你找到一个匹配,只需支持一个计数器.

    for (int i = 0; i < listView1.Items.Count; i++)
    {
        if (listView1.Items[i].SubItems[0].Text == "A1")
        {
            listView1.Items.RemoveAt(i);
            i--; // Back counter up one
        }
    }
Run Code Online (Sandbox Code Playgroud)