2013-07-20 2 views
0

У меня есть ListView с перечислен некоторым путем к файлам во втором столбцеКак удалить выбранные файлы, перечисленные во втором столбце списка?

, и я хочу, чтобы удалить все выбранные файлы, перечисленные во втором столбце , конечно, я хочу, чтобы удалить также элементы.

Я пробовал

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

и это удаление выбранных элементов, но не удаляя файлы, выбранные во втором столбце .. , потому что я получил ошибку

значение System.Windows.Forms типа .Listviewitem не может быть преобразован в строку

ответ

1

Тип переменной контура i is ListViewItem, а File.Delete() принимает путь к файлу типа string, вам нужно исправить это. Чтобы получить пути к файлам из второго столбца использовать ListViewItem'sSubItems свойства:

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 
+0

ArgumentOutOFRangeException был необработанным | InvalidArgument = Значение 1 недействительно для индекса | имя параметра: index – 28121327

+0

Убедитесь, что _ListView1_ содержит не менее 2 столбцов? На какой линии это исключение приходит? – Coder

+0

Линия: System.IO.File.Delete (lvi.SubItems (1) .ToString()) – 28121327

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 
+0

не работает, ошибка в этой строке: System.IO.File.Delete (lvi.subitem (1) | subitem не является членом System.Windows.Forms.ListViewItem и ')' ожидается | Я добавил «)», а затем только «subitem не является членом System.Windows.Forms.ListViewItem» – 28121327

+0

@ 28121327 Вы правы, в моем примере кода были неправильные детали. Помогает ли обновленный ответ? – Chris