Images aus einer ListView + Ordner löschen

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Morrison.

    Images aus einer ListView + Ordner löschen

    Hi, ich möchte gerne eine Datei (in meinem Fall Images) aus einer ListView löschen.
    Allerdings sollen diese Dateien auch aus dem realen Ordner auf der Festplatte gelöscht werden!

    Ich habe es nur hinbekommen, dass die Datei in dem angezeigten Ordner des Programmes verschwindet.

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Try
    5. FolderBrowserDialog1.ShowDialog()
    6. For Each item As String In My.Computer.FileSystem.GetFiles(FolderBrowserDialog1.SelectedPath, FileIO.SearchOption.SearchTopLevelOnly)
    7. ImageList1.Images.Add(New Bitmap(item, False).GetThumbnailImage(100, 100, Nothing, IntPtr.Zero))
    8. ListView1.Items.Add(My.Computer.FileSystem.GetName(item), ImageList1.Images.Count - 1)
    9. ListBox1.Items.Add(item)
    10. Next
    11. Catch ex As Exception
    12. End Try
    13. End Sub
    14. Private Sub ListView1_ItemSelectionChanged(sender As Object, e As ListViewItemSelectionChangedEventArgs) Handles ListView1.ItemSelectionChanged
    15. Dim x As Integer = Nothing
    16. If e.IsSelected Then
    17. Try
    18. ListBox1.SelectedIndex = ListView1.SelectedIndices(0)
    19. Catch ex As Exception
    20. End Try
    21. End If
    22. End Sub
    23. Dim ttip As New ToolTip()
    24. Dim _dragActive As Boolean = False
    25. Dim _dragName As String = Nothing
    26. Private Sub ListView1_ItemDrag(sender As Object, e As ItemDragEventArgs) Handles ListView1.ItemDrag
    27. Dim lvItem As ListViewItem = DirectCast(e.Item, ListViewItem)
    28. _dragActive = True
    29. _dragName = ListBox1.SelectedItem.ToString()
    30. Timer1.Start()
    31. End Sub
    32. Private Sub _MouseUp(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles PictureBox1.MouseUp
    33. If e.Button = MouseButtons.Left AndAlso _dragActive Then
    34. PictureBox1.Load(ListBox1.SelectedItem.ToString())
    35. End If
    36. End Sub
    37. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    38. If _dragActive = True AndAlso MouseButtons.HasFlag(MouseButtons.Left) Then
    39. Dim cp = Cursor.Position
    40. cp.Y += CInt(Cursor.Size.Height * 1.5)
    41. ttip.Show(_dragName, Me, PointToClient(cp))
    42. Else
    43. ttip.Hide(Me)
    44. _dragActive = False
    45. End If
    46. End Sub
    47. Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
    48. End Sub
    49. Private Sub ListView1_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles ListView1.MouseDoubleClick
    50. Form2.PictureBox1.Load(ListBox1.SelectedItem.ToString())
    51. Form2.Show()
    52. End Sub
    53. Private Sub FileSystemWatcher1_Changed(sender As Object, e As IO.FileSystemEventArgs) Handles FileSystemWatcher1.Changed, FileSystemWatcher1.Deleted, FileSystemWatcher1.Created
    54. Try
    55. ImageList1.Images.Add(New Bitmap(e.FullPath, False).GetThumbnailImage(200, 200, Nothing, IntPtr.Zero))
    56. ListView1.Items.Add(My.Computer.FileSystem.GetName(e.FullPath), ImageList1.Images.Count - 1)
    57. ListBox1.Items.Add(e.FullPath)
    58. Catch ex As Exception
    59. End Try
    60. End Sub
    61. Private Sub ListView1_MouseClick(sender As Object, e As MouseEventArgs) Handles ListView1.MouseClick
    62. If e.Button = MouseButtons.Right Then
    63. Dim message As String =
    64. "Wollen Sie die Datei löschen?"
    65. Dim caption As String = "Datei löschen"
    66. Dim result = MessageBox.Show(message, caption,
    67. MessageBoxButtons.YesNo,
    68. MessageBoxIcon.Question)
    69. If (result = DialogResult.No) Then
    70. Return
    71. End If
    72. If (result = DialogResult.Yes) Then
    73. Try
    74. 'Remove single item
    75. ListView1.Items.RemoveAt(ListView1.SelectedIndices(0))
    76. 'Remove Multiple Selected Items
    77. For Each item As ListViewItem In ListView1.SelectedItems
    78. item.Remove()
    79. Next
    80. 'Select Item at last index
    81. ListView1.Items(ListView1.Items.Count - 1).Selected = True
    82. Catch ex As Exception
    83. End Try
    84. End If
    85. End If
    86. End Sub
    87. End Class

    paanaa schrieb:

    VB.NET-Quellcode

    1. Form2.Show()
    Gugst Du Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    Kannst Du mal den Ablauf beschreiben (Da hin klicken, die Information von da nach dort reichen usw.), wie es von der Auswahl zum Löschen kommen soll?
    =====

    VB.NET-Quellcode

    1. If (result = DialogResult.Yes) Then
    Dieses If kannste einfach weglassen.
    Ich denke mal, setze einen Haltepunkt rein und steppe Deinen Code durch. Debuggen, Fehler finden und beseitigen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das

    VB.NET-Quellcode

    1. Form2.Show()
    ist für die Paint Oberfläche gedacht. Soll nichts mit der Lösch/Remove Funktion zu tun haben.

    Es soll eine Datei mit einem Rechtsklick in einem Ordner Ausgewählt werden und eine MessageBox erscheinen wobei abgefragt wird, ob eine Datei gelöscht werden soll.
    Hierbei soll 1. im Programm die Datei nicht mehr sichtbar sein durch ein remove aus der ListView und 2. soll die Datei von der Festplatte in den Papierkorb von Windows verschoben werden.

    paanaa schrieb:

    ist für die Paint Oberfläche gedacht.
    Ist egal wofür, das ist ganz ganz ganz ganz schlimmer VB6-Ranz!!!!
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    paanaa schrieb:

    Okay
    Nicht verstanden.
    Form2 ist der Name der Klasse, Du rufst die scheiß mist ranz VB6-Kompatibilitäts-Instanz auf, Du kannst so z.B. nicht zwei Instanzen dieser Form gleichzeitig darstellen!
    Mach einen ordentlichen Aufruf mit einer ordentlichen .NET-Instanz:

    VB.NET-Quellcode

    1. Using dlg = New Form2
    2. dlg.ShowDialog()
    3. End Using
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    paanaa schrieb:

    VB.NET-Quellcode

    1. Form2.Showdialog(Me)
    Damit kannst Du das?
    Glaube ich nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @paanaa Nur um das richtig zu verstehen:
    Du kannst mit

    VB.NET-Quellcode

    1. Form2.Showdialog(Me)
    eine Klick-Aktion ausführen, die mit

    VB.NET-Quellcode

    1. Using dlg = New Form2
    2. dlg.ShowDialog(Me)
    3. End Using
    nicht geht?
    Poste mal davon den Code.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @paanaa: Das muss dann dementsprechend so aussehen bei Dir::

    VB.NET-Quellcode

    1. Private Sub ListView1_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles ListView1.MouseDoubleClick
    2. 'Form2.PictureBox1.Load(ListBox1.SelectedItem)
    3. 'Form2.Show()
    4. Using dlg = New Form2
    5. dlg.PictureBox1.Load(ListBox1.SelectedItem)
    6. dlg.ShowDialog()
    7. End Using
    8. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Morrison“ ()

    Ich habe es jetzt soweit, dass man die Datei in den Papierkorb verschieben kann.
    Allerdings sind meine Dateien durch das Laden in die ListView und ListBox gesperrt und somit nicht löschbar.

    VB.NET-Quellcode

    1. Private Sub ListView1_MouseClick(sender As Object, e As MouseEventArgs) Handles ListView1.MouseClick
    2. If e.Button = MouseButtons.Right Then
    3. Dim message As String =
    4. "Wollen Sie die Datei löschen?"
    5. Dim caption As String = "Datei löschen"
    6. Dim result = MessageBox.Show(message, caption,
    7. MessageBoxButtons.YesNo,
    8. MessageBoxIcon.Question)
    9. If (result = DialogResult.No) Then
    10. Return
    11. End If
    12. Try
    13. For Each lvItem As ListViewItem In ListView1.Items
    14. If lvItem.Selected = True Then
    15. Debug.Print(lvItem.Name)
    16. My.Computer.FileSystem.DeleteFile(lvItem.Name, FileIO.UIOption.AllDialogs, FileIO.RecycleOption.SendToRecycleBin)
    17. ListView1.Items.Remove(lvItem)
    18. End If
    19. Next
    20. Catch ex As Exception
    21. End Try
    22. End If
    23. End Sub
    Du musst Dir vor dem löschen den Dateinamen merken..
    ..hab dafür eine Variable "_toDelete" angelegt, als String..darin speicherst Du den Pfad ab.

    VB.NET-Quellcode

    1. Dim _toDelete As String = Nothing
    2. Private Sub ListBox_MouseClick......
    3. ...
    4. If (result = DialogResult.Yes) Then
    5. _toDelete = ListBox1.Items(ListBox1.IndexFromPoint(e.Location)).ToString
    6. Try
    7. Debug.WriteLine(_toDelete)
    8. My.Computer.FileSystem.DeleteFile(_toDelete, FileIO.UIOption.AllDialogs, FileIO.RecycleOption.SendToRecycleBin)
    9. ListView1.Items.Remove(ListView1.Items(ListBox1.IndexFromPoint(e.Location)))
    10. ListBox1.Items.Remove(ListBox1.Items(ListBox1.IndexFromPoint(e.Location)))
    11. Catch ex As Exception
    12. End Try
    13. End If
    14. ...
    15. End Sub