0

我有一个列表视图,在第二列中列出了一些文件路径

我想删除第二列中列出的所有选定文件当然我也想删除这些项目。

我尝试过这个

For Each i As ListViewItem In ListView1.SelectedItems
    ListView1.Items.Remove(i)
    System.IO.File.Delete(i)
Next

它正在删除选定的项目,但没有删除第二列中选择的文件..因为我遇到了一个错误

System.Windows.Forms.Listviewitem 类型的值无法转换为字符串

4

2 回答 2

1

循环变量的类型iListViewItemwhileFile.Delete()接受类型的文件路径string,您需要更正它。要从第二列获取文件路径,请使用ListViewItem's SubItems属性:

Dim idx As Integer = ListView1.SelectedItems.Count - 1
For i As Integer = idx To 0 Step -1
    Dim lvi As ListViewItem = ListView1.SelectedItems(i)
    System.IO.File.Delete(lvi.SubItems(1).Text)
    ListView1.Items.Remove(lvi)
Next
于 2013-07-20T12:28:55.900 回答
1
  • 要从中获取值listviewItem,您需要访问ListviewItem.Subitems属性。你想要的值在第二列,所以它是subitems(1)

  • 您不能像这样循环进入选定的项目并删除循环中的项目。所选项目集合将更改,您将收到异常。

  • 我建议您删除 Try Catch 块中的文件。如果您有异常,请不要删除 ListviewItem。


这应该有效。

If ListView1.SelectedItems.Count > 0
   For i As Integer = ListView1.SelectedItems.Count - 1 To 0 Step -1
      Dim lvi As listviewItem = ListView1.SelectedItems(0)
      Try
         Dim filepath as String = lvi.subitems(1).Text
      If System.IO.File.Exists(filepath) Then
             System.IO.File.Delete(filepath)
             ListView1.Items.Remove(lvi)
          End If
      Catch ex as Exception
         ' Do something

         'you will have another exception for the next item because
         'It will try to delete the same (selectedItem(0))
         'So exit
          Exit for 
      End Try
    Next
 End If
于 2013-07-20T12:29:22.847 回答