c# - 删除 ListView 中的项目

标签 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();
                }
            }

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

最佳答案

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/

相关文章:

.net - 找不到指定的框架 'Microsoft.AspNetCore.App',版本 '2.2.5'

c# - 将根 JSON 数组映射到类型的属性。 。网

c# - 后台 worker 调用之间是否保留了线程本地存储?

wpf - 以 WPF 窗口为父级的 Winform 对话框

c# - 在 Mono 中处理通信的简单跨平台进程?

c# - 用c#替换图像中的颜色

.net - 什么时候应该谨慎使用 .NET 中的数据绑定(bind)?

c# - 设置窗口在用户屏幕上的默认位置

c# - HttpWebResponse 输出流不关闭

c# - 新行+制表符的字符串常量?