删除ListView中的项目

时间:2016-02-19 15:11:11

标签: c# .net winforms listview

我在按钮操作中有一个循环用于移除ListView中的空项目,但问题是,当我按下按钮时,它只会成功删除单个项目。我的意思是:当一个接一个的时候,它不会删除项目:

示例:

a1 = ""
a2 = "qwe"
a3 = ""
a4 = ""
a5 = "qwe"

所以,点击按钮后,结果将是:

a2 = "qwe"
a3(or a4 idk) = ""
a5 = "qwe"

我认为这很容易出现逻辑问题,但我无法弄明白。

for (int i = 0; i < listView1.Items.Count; i++) 
            {
                if (listView1.Items[i].SubItems[2].Text == "")
                {
                    listView1.Items[i].Remove();
                }
            }

所以问题是循环在找到空值后跳过一次检查。 我该如何解决?

1 个答案:

答案 0 :(得分:4)

删除for loop中的项目时,向后循环

for (int i = listView1.Items.Count - 1; i >= 0; --i) 
  if (listView1.Items[i].SubItems[2].Text == "")
    listView1.Items[i].Remove();

或将for循环修改为

for (int i = 0; i < listView1.Items.Count; ) // no ++i here
  if (listView1.Items[i].SubItems[2].Text == "")
    listView1.Items[i].Remove();
  else  
    i += 1; // ...but it's here

这是ListView项以外的常见原则。了解要了解的内容:想象您要从集合中删除A

  [A, A, B, A] 

当您发现必须删除第0项时,删除后不应增加计数器,而是测试 new 第0项再次