Как эта рекурсивная функция обновляет TreeView, не имея бесконечного цикла? - PullRequest
0 голосов
/ 05 мая 2018

Я получил код в vb.net, который позволяет отображать древовидную структуру каталога. Этот код использует рекурсивную подпроцедуру (sub) для обновления узлов TreeView без использования любого из этих методов. Я хотел знать, как это было возможно. Вот код:

Imports System.IO

Public Class Form1

    Const DirectoryToList As String = "." ' The current in this case

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Defines the first node
        Me.MyTreeView.TopNode = Me.MyTreeView.Nodes.Add(DirectoryToList, DirectoryToList)

        'Tree structure of the first node
        For Each Directory As String In Directory.GetDirectories(DirectoryToList)
            Me.MyTreeView.TopNode.Nodes.Add(Directory, Path.GetFileName(Directory))
            'Recursive
            ListFolderTree(Directory, Me.MyTreeView.TopNode)
        Next
        'Files of the first node
        For Each File As String In Directory.GetFiles(DirectoryToList)
            Me.MyTreeView.TopNode.Nodes.Add(Path.GetFileName(File))
        Next
    End Sub

    ' ListFolderTree is the "strange" sub whose operation I don't understand

    Sub ListFolderTree(ByVal DirectoryActuel As String, ByVal NodeActuel As TreeNode)
        'Recovers the node in which we are
        Dim Node As TreeNode = NodeActuel.Nodes(DirectoryActuel)
        'Directories of this node
        For Each Directory As String In Directory.GetDirectories(DirectoryActuel)
            Node.Nodes.Add(Directory, Path.GetFileName(Directory))
            'Recursive
            ListFolderTree(Directory, Node)
        Next
        'Files for this node
        For Each File As String In Directory.GetFiles(DirectoryActuel)
            Node.Nodes.Add(Path.GetFileName(File))
        Next
    End Sub

End Class

И результат ожидаемый, поэтому древовидная структура. Не могли бы вы объяснить мне, что я не понимаю в подпроцедуре «ListFolderTree»? Я знаю, что рекурсивность может получить файлы и другие папки, которые сами находятся в папках выше в дереве, но как данные сохраняются в элементе управления TreeView?

1 Ответ

0 голосов
/ 08 мая 2018

В точке, где у действительного каталога нет подкаталога, деталь

    For Each Directory As String In Directory.GetDirectories(DirectoryActuel)
        Node.Nodes.Add(Directory, Path.GetFileName(Directory))
        'Recursive
        ListFolderTree(Directory, Node)
    Next

будет циклом без итераций, потому что коллекция из Directory.GetDirectories(DirectoryActuel) будет пустой, поэтому никакого другого рекурсивного вызова не будет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...