In List of String schreiben

  • VB.NET

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

    In List of String schreiben

    Guten Morgen und Hallo.

    Leider muss ich schon am Anfang meines Projektes um Hilfe bitten.
    Das Programmieren lerne ich durch lesen und Try and Error.

    Nun zu meinem Problem, ich möchte in einer ListBox Orner und Dateien angezeigt bekommen.
    Das ganze habe ich so gelöst:

    VB.NET-Quellcode

    1. For Each ordner As String In My.Computer.FileSystem.GetDirectories("pfad")
    2. Me.ListBox1.Items.Add(ordner)


    Jetzt wollte ich aber das ich die Ordner und Dateien vorher in eine List(of String) gespeichert wird und danach in der Listbox dargestellt wird.
    Das ganze wollte ich so lösen:

    VB.NET-Quellcode

    1. Dim l As List(Of String) = New List(Of String)
    2. For Each ordner As String In My.Computer.FileSystem.GetDirectories("pfad")
    3. l.Add(ordner)
    4. Me.ListBox1.Items.Add(l)



    Leider funktioniert es nicht, es wird immer eine leer List angezeigt, zumindest steht in der LIstBox untereinander nur (Auflistung).
    Ich verstehe nicht wo das Problem liegt.


    Ja ich nutze Chrome deswegen werden die Codes nicht richtig angezeigt.

    Ich hoffe das ihr mir helfen könnt.

    Vielen Dank
    Steve

    Edit by der_Kurt:
    Ich benutze Chrome und habe deinen Code formatiert ;)

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

    VB.NET-Quellcode

    1. Dim l As List(Of String) = New List(Of String)
    2. For Each ordner As String In My.Computer.FileSystem.GetDirectories("c:\temp")
    3. l.Add(ordner)
    4. Me.ListBox1.Items.Add(ordner) ' Ordner, nicht l
    5. Next
    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!
    Danke für die super schnelle Antwort.
    OK so bekomme ich die Ordner und Dateien genau wie bei meinem "alten" Code angezeigt. Nur ist die Liste "l" dann immer noch leer. So könnte ich mir den Umweg über die List(of String) auch sparen.

    Mal angenommen ich mache das so:

    VB.NET-Quellcode

    1. Dim l As List(Of String) = New List(Of String)
    2. For Each ordner As String In My.Computer.FileSystem.GetDirectories("c:\temp")
    3. l.Add(ordner)
    4. Me.ListBox1.Items.Add(ordner) ' Ordner, nicht l
    5. msgbox(l)
    6. Next


    Dann wird in der msgbox auch eine leere Liste angezeigt, das Problem ist wohl das nix in die Liste geschrieben wird.

    Also ich möchte das

    VB.NET-Quellcode

    1. For Each ordner As String In My.Computer.FileSystem.GetDirectories("c:\temp")

    in eine List(of String) schriebt und dann

    VB.NET-Quellcode

    1. Me.ListBox1.Items.Add(List(of String)
    die Liste in der ListBox anzeigt.

    Danke für Gehirnjogging
    Steve
    msgbox(l)
    =>
    msgbox(Ordner)
    Und die Liste ist wohl gefüllt.
    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!

    RodFromGermany schrieb:

    msgbox(l)
    =>
    msgbox(Ordner)
    Und die Liste ist wohl gefüllt.


    Entweder wir verstehen uns falsch oder ich drücke mich falsch aus.

    VB.NET-Quellcode

    1. msgbox(ordner)

    gibt aus was ich mit

    VB.NET-Quellcode

    1. For Each ordner As String In My.Computer.FileSystem.GetDirectories("c:\temp")

    ausgelesen habe. Ich möchte aber das was ich mit

    VB.NET-Quellcode

    1. l.Add(ordner)


    in die Liste geschrieben habe in der msgbox/ListBox dargestelt wird. Sonst kann ich mir ja den Weg über die List(of String) sparen.

    Aber danke für die Hilfe schon mal.
    Steve
    Ich hoffe, dass ich Dich verstanden habe.
    1. Option Strict On
    2.

    VB.NET-Quellcode

    1. Dim txt As String = ""
    2. For Each ordner As String In My.Computer.FileSystem.GetDirectories("c:\temp")
    3. Me.ListBox1.Items.Add(ordner)
    4. txt &= ordner & vbNewLine
    5. Next
    6. MsgBox(txt)

    MsgBox(l) geht so 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!

    RodFromGermany schrieb:

    Ich hoffe, dass ich Dich verstanden habe.
    1. Option Strict On
    2.

    VB.NET-Quellcode

    1. Dim txt As String = ""
    2. For Each ordner As String In My.Computer.FileSystem.GetDirectories("c:\temp")
    3. Me.ListBox1.Items.Add(ordner)
    4. txt &= ordner & vbNewLine
    5. Next
    6. MsgBox(txt)

    MsgBox(l) geht so nicht.


    Ich glaube jetzt bin ich auf dem richtigen Weg, werde das dann zu Hause am PC testen, jetzt erstmal weiter arbeit (Auto's Schrauben).

    /EDIT
    Zu schnell gelesen.
    Jetzt habe ich aber keine List( of String) mehr!

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

    Brauchst du eine ListOf denn noch??

    Wieso willst du eine List(Of String) UND noch eine ListBox haben? Das ist doch das selbe, außer dass die ListBox angezeigt welche Items sich in ihr befinden?

    Um alle Verzeichnisse in der ListBox anzuzeigen benötigst du nur einen Einzeiler

    VB.NET-Quellcode

    1. ListBox1.Items.AddRange(My.Computer.FileSystem.GetDirectories("c:\temp"))


    Jetzt stehen in der Listbox alle Verzeichnisse die sich im Ordner Temp befindet. Wenn du einen Ordner mit einem bestimmten Index haben willst kannst du es so auslesen

    VB.NET-Quellcode

    1. MsgBox(ListBox1.Items(3).ToString())
    zeigt das 4. Listbox-Element in einer MEssagebox an.

    Wozu also eine ListOf??

    Dodo schrieb:

    Brauchst du eine ListOf denn noch??

    Wieso willst du eine List(Of String) UND noch eine ListBox haben? Das ist doch das selbe, außer dass die ListBox angezeigt welche Items sich in ihr befinden?


    Ja die ListOf brauche ich noch. Ich weiß das beides das selbe ist.
    Nur möchte ich das die ListBox einträge anders aussehen als die in der ListOf.

    zur Erklärung
    in der ListOf soll z.b. c:\temp\test stehen
    und in der ListBox dann NUR \temp\test

    Das Programm soll dann aber wissen das wenn ich \temp\test in der ListBox anwähle es in wirklichkeit c:\temp\test ist.

    Wenn es eine bessere Lösung gibt, immer her damit.

    Hoffe jetzt kann ich meine Gedanken besser rüber bringen.

    Super Sache mit dem Einzeiler!!!!!

    Steve
    Das würde ich dann trotzdem nicht so lösen, weil wenn du Einträge verschieben solltest oder löschen musst sie identisch in der List(Of) Verschieben/Löschen, das heißt die konsistenz ist nicht zu 100% gewährleistet, dass der ListBox Index gleich dem Element in der Liste ist.

    Das Beste wäre ne kleine Klasse dafür

    VB.NET-Quellcode

    1. Public Class PathItem
    2. Public Path As String
    3. Public Sub New(ByVal PathName As String)
    4. Path = PathName
    5. End Sub
    6. Public Overrides Function ToString() As String
    7. Return Path.SubString(3) ' Path String beginnt aber Position 3 somit fällt c:\ weg
    8. End Sub
    9. End Class


    Hinzufügen zur Liste (hier leider kein Einzeiler mehr möglich

    VB.NET-Quellcode

    1. For Each OrdnerAs String In My.Computer.FileSystem.GetDirectories("c:\temp")
    2. ListBox1.Items.Add(New PathItem(Ordner))
    3. Next


    Die ListItems sind vom Type Object, heißt du kannst alles mögliche als Item hinzufügen, beim Anzeigen des Objekts wird die ToString() Funktion ausgeführt, das heißt es wird der String angezeigt, den die toString() Funktion deiner Klasse zurück gibt, den kannst du nun also komplett selbst definieren. Aber in jedem ListItem ist trotzdem noch der komplette Pfad enthalten und so bekommst du ihn wieder

    VB.NET-Quellcode

    1. Dim pi As PathItem = TryCast(Listbox1.SelectedItem, PathItem) ' ListItem vom Typ Object nach Type PathItem Casten
    2. MsgBox(pi.Path)


    PS: und dies nennt sich dann OOP (Objekt Orientiertes Programmieren) somit haben wir das auch gleich mal mit gelernt =)