TreeView mit Ordnern füllen

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Memo.

    TreeView mit Ordnern füllen

    Hallo leute
    Ich möchte eine TreeView mit Ordnern füllen.
    Hab dazu einen Testordner erstellt.
    Leider funktioniert es nicht ganz so wie ich es mir vorstelle:

    VB.NET-Quellcode

    1. Function GetFolders(ByVal Tn As TreeNode, ByVal DirInfo As DirectoryInfo) As TreeNode
    2. Dim SubTn As TreeNode
    3. Dim dinfos As DirectoryInfo() = DirInfo.GetDirectories()
    4. Threading.Thread.Sleep(1)
    5. If dinfos.Count = 0 Then
    6. Return Tn
    7. End If
    8. For Each Path As DirectoryInfo In dinfos
    9. SubTn = New TreeNode(Path.Name)
    10. SubTn.Tag = Path
    11. GetFolders(SubTn, Path)
    12. Next
    13. End Function


    Aufrufen tu ich so:

    VB.NET-Quellcode

    1. TreeView1.Nodes.Add(GetFolders(New TreeNode(), New DirectoryInfo("D:\Test - Kopie")))

    Hoffe ihr findet den Fehler
    Bei dieser Rekursion müsstest du aufpassen, da man sonst leicht mal den kompletten Rechner "indexiert". ;)

    Dein Fehler müsste darin liegen, dass du in der Funktion kein Treenode-Objekt zurück gibst.
    Außerdem verwendest du den Parameter "Tn as Treenode" nur, wenn keine Verzeichnisse vorhanden sind.

    (Und warum das Sleep()? Würde ich weg lassen.)

    Versuche es so:

    VB.NET-Quellcode

    1. Function GetFolders(ByVal Tn As TreeNode, ByVal DirInfo As DirectoryInfo) As TreeNode
    2. if tn IsNot nothing andalso dirinfo isnot nothing then
    3. Dim dinfos As DirectoryInfo() = DirInfo.GetDirectories()
    4. tn.text = dirinfo.name
    5. If dinfos.Length <> 0 Then
    6. For Each Path As DirectoryInfo In dinfos
    7. Dim SubTn As New TreeNode(Path.Name)
    8. SubTn.Tag = Path
    9. Tn.nodes.add(GetFolders(SubTn, Path))
    10. Next
    11. end if
    12. end if
    13. return TN
    14. End Function

    Lässt sich sicher noch optimieren, aber das Prinzip sollte deutlich werden.
    Mit der Rekursion würde ich nie "tiefer" als 4 gehen, sonst kann die Auslastung ganz schnell steigen!
    Von meinem iPhone gesendet

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „nikeee13“ ()