我在按钮操作中有一个循环,用于删除 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();
}
}
所以问题是循环在找到空值后跳过了一次检查。 我该如何解决?
最佳答案
在for 循环
中删除项目时,向后 循环:
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 项时,您不应在删除后递增 计数器,而是新再次测试第 0 项.
关于c# - 删除 ListView 中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35508514/