从循环中的ListBox项中删除

时间:2013-10-09 11:42:24

标签: vb.net

每个项目信息都来自使用该项目名称指定的文件。即使所选项目将在列表框中正确删除,但下一项目的文件将被删除。我不知道问题是针对索引还是其他任何部分

  SourceDir  = "c:\"
  For Each itemIndex In listHouse.SelectedIndices()
            itemIndex = listHouse.SelectedIndices(0)
            listHouse.Items.RemoveAt(itemIndex)
            MsgBox(listHouse.Items.Item(itemIndex).Text & "R.txt")
            File.Delete(SourceDir & listHouse.Items.Item(itemIndex).Text & "R.txt")

        Next

1 个答案:

答案 0 :(得分:1)

For/Each循环中,您无法在集合中添加或删除项目。

每次RemoveAt(n),您都会更改正在循环的集合的构成。如果删除第4项,则第5项移动到其插槽。然后在Next之后,您的代码将查看位置5,并查看最初的#6 - 项目5将被完全跳过。为防止出现这种每隔一个错误/问题,使用For/Each时会抛出异常。

其次,您的File.Delete代码正在尝试引用刚删除的项目!

迭代集合并逐个删除部分/全部项目,使用索引器向后循环。这从集合的末尾删除,因此没有任何东西可以“向上移动”。像这样:

' loop backwards using For n
For n as Integer = listHouse.SelectedIndices.Count -1 to 0 Step-1
    itemIndex = listHouse.SelectedIndices(n)

    MsgBox(listHouse.Items.Item(n).Text & "R.txt")
    File.Delete(SourceDir & listHouse.Items.Item(n).Text & "R.txt")

    ' also remove the thing AFTER you have used it to delete
    listHouse.Items.RemoveAt(n)
Next

如果您尝试使用此类操作的前向For n循环,则会遇到另外一个问题。