1

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

  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
4

1 回答 1

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此类操作中使用前向循环,您会遇到彼此之间的问题。

于 2013-10-09T11:51:13.927 回答