*.exe-Dateien aus einem Ordner in einer ListView auflisten und starten

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Kangaroo.

    *.exe-Dateien aus einem Ordner in einer ListView auflisten und starten

    Hallo zusammen!
    Ich arbeite gerade an einem kleinen Programm, in dem *.exe-Dateien aus einem Ordner (der Ordner ist schon festgesetzt) in einer ListView aufgelistet werden und dann durch Doppelklick gestartet werden. Leider kenne ich mich mit ListViews nicht so gut aus, da ich eigentlich fast nie mit ihnen arbeite, deswegen brauche ich euere Hilfe wie ich das umsetzen könnte. :S Die Items sollten wenn es möglich ist auch das Icon der jeweiligen Datei besitzen.
    Danke schon mal im Vorraus!
    Willkommen im Forum. :thumbup:
    Da Du am Anfang bist: Vergiss das ListView, steig sofort um auf DataGridView. Das ist wesentlich mächtiger und eleganter.
    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!
    mit System.IO bekommst du viele Möglichkeiten der Verwaltung von Ordnern und Dateien.
    Damit könntest du die Namen aller Dateien eines Ordners auslesen. Dann musst du nurnoch den Namen nach .exe durchsuchen und dem Datagridview als Eintrag hinzufügen.
    Damit kannst du einen oOdner Durchsuchen


    VB.NET-Quellcode

    1. 'FOLDERBROWSER !
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. If Me.FolderBrowserDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
    4. Pfad = Me.FolderBrowserDialog1.SelectedPath
    5. End If
    6. Me.TextBox1.Text = Pfad
    7. End Sub
    8. 'ORDNER DURCHSUCHEN !
    9. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    10. Dim oDir As IO.DirectoryInfo
    11. oDir = New IO.DirectoryInfo(Me.TextBox1.Text) ' Textbox 1 ist die Pfadangabe zum suchen !
    12. For Each subdir In oDir.GetDirectories()
    13. My.TextBox1.Text = subdir.FullName.ToString
    14. Try
    15. For Each sFile As String In My.Computer.FileSystem.GetFiles(My.TextBox1.Text, FileIO.SearchOption.SearchAllSubDirectories, *.exe) ' Dateiauswahl !
    16. ListBox1.Items.Add(sFile) ' Hier wirts angezeigt !
    17. Next
    18. Catch ua_ex As UnauthorizedAccessException
    19. Catch ex As Exception
    20. End Try
    21. Next
    22. End Sub





    LG.Andre
    Habe mal TVX's Methode ausprobiert (ich weiß dass Strings nicht die beste Lösung sind ;) ) und bis jetzt klappt das schon ziemlich gut.
    Wie kann ich aber noch implementieren, dass das Item das Icon der EXE besitzt und beim Klick ausgeführt wird?
    Bevor EDR hier wieder mit Datasets anfängt:
    - zieh ein Datagridview in Deine Form
    - kopiere den Code unten in Deine Form
    - kompilieren
    - dann verbinde die DatagridView.Datasource im Designer mit der Klasse ExeFileInfo Deines Projektes
    - jetzt bearbeite die Spalten des DataGridView wie Du es haben möchtest

    "Beispielcode"

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private lstExeFiles As List(Of ExeFileInfo)
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. ' falls nicht schon im Designer gesetzt
    5. With DataGridView1
    6. .AllowUserToAddRows = False
    7. .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
    8. .AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
    9. .MultiSelect = False
    10. .ReadOnly = True
    11. End With
    12. End Sub
    13. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    14. lstExeFiles = New List(Of ExeFileInfo)
    15. Dim DirInfo As New IO.DirectoryInfo("c:\windows")
    16. ' files durchlaufen
    17. For Each f As IO.FileInfo In DirInfo.GetFiles("*.exe", IO.SearchOption.TopDirectoryOnly)
    18. ' icon extrahieren
    19. Dim fileIcon As Icon = Icon.ExtractAssociatedIcon(f.FullName)
    20. ' zur Liste hinzufügen
    21. lstExeFiles.Add(New ExeFileInfo With {.Icon = fileIcon, .Name = f.Name, .Path = f.FullName})
    22. Next
    23. ' list an DataGridView binden
    24. DataGridView1.DataSource = lstExeFiles
    25. End Sub
    26. End Class
    27. ' Infos über Exe File
    28. Public Class ExeFileInfo
    29. Public Property Icon As Icon
    30. Public Property Name As String
    31. Public Property Path As String
    32. End Class


    TVX FolderBrowserDialog kannst Du noch selber einbauen.
    Danke, auch wenn ich mich noch mehr freue wenn Du nicht nur die Anleitung verstehst, sondern auch warum sie so und nicht anders geschrieben wurde.

    Ein paar Erklärungen (es war ein 5min Code, da ich andere Verabredungen hatte):

    TVX Code ist absolut nicht 'schlecht': er tut was er soll, auch das ExtractIcon wäre dort problemlos einzubauen. So fängt jeder mit VB.NET an.
    Nur verletzt er 1 Grundsatz, den man erst nach etwas Erfahrung anwendet: trenne immer interne Datenhaltung von der Präsentation.

    Daher DataBinding:
    Wie oben beschrieben, binde ich das DataGridView an eine (leere) Klasse, obwohl dort später die Liste als DataSource verwendet wird.
    Die Klasse dient damit nur als 'Platzhalter' damit Du schon während des Designs Dein DataGridView konfigurieren kannst. Visual Studio generiert automatisch die Spalten aus den Properties der Klasse, Du kannst die Überschriften, Colors, Spaltenbreite, etc. schon bequem im Designer sehen und verändern, sowie Spalten auf 'Invisible' setzen wenn sie nicht anzgeeigt werden sollen. Alles bevor irgendein Code ausgeführt wird.

    Oft wird Dir hier dafür ein Dataset empfohlen, welches aber für diese einfache Aufgabe überdimensioniert ist.

    Nachtrag: für das Starten der .exe Files benutzt man Process.Start(filePath)