每个项目信息都来自使用该项目名称指定的文件。即使所选项目将在列表框中正确删除,但下一项目的文件将被删除。我不知道问题是针对索引还是其他任何部分
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
答案 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
循环,则会遇到另外一个问题。