vb.net - 这个递归函数如何在没有无限循环的情况下更新 TreeView?
问题描述
我在 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 控件中?
解决方案
在实际目录没有子目录的地方,该部分
For Each Directory As String In Directory.GetDirectories(DirectoryActuel)
Node.Nodes.Add(Directory, Path.GetFileName(Directory))
'Recursive
ListFolderTree(Directory, Node)
Next
将是一个没有迭代的循环,因为集合 fromDirectory.GetDirectories(DirectoryActuel)
将为空,因此不会进行其他递归调用。