На первый взгляд кажется, что вы добавляете каждый найденный узел на корневой уровень дерева.
TreeView1.Nodes.Add(nodeOjb)
То, что вам нужно сделать, это выполнить рекурсивный вызов текущего узла, с которым вы работаете, и использовать его для добавления следующего уровня найденных узлов.
currentNode.Add(nodeObj)
Таким образом, вы можете добавить детей в узлы. Вместо того, чтобы всегда добавлять все узлы в корень дерева.
РЕДАКТИРОВАТЬ: Вот изменения, которые необходимо внести в метод PopulateTree:
Private Sub PopulateTree(currentNode As TreeNode, path__1 As String, subfoldercount As Integer)
Dim items As String() = Nothing
items = Directory.GetFileSystemEntries(path__1)
Dim nodeParent As TreeNodeCollection = If((currentNode IsNot Nothing), currentNode.Nodes, Me.TreeView1.Nodes)
For Each itm As String In items
If Directory.Exists(itm) Then
Dim nodeOjb = New TreeNode()
nodeOjb.Text = "FOLDER :: " & subfoldercount & " :: " & itm
nodeOjb.ForeColor = Color.Blue
nodeParent.Add(nodeOjb)
Me.PopulateTree(nodeOjb, itm, subfoldercount + 1)
Else
Dim nodeOjb = New TreeNode()
nodeOjb.Text = "FILE :: " & subfoldercount & " :: " & itm
Select Case Path.GetExtension(itm)
Case ".txt"
nodeOjb.ForeColor = Color.Orange
nodeParent.Add(nodeOjb)
Exit Select
Case ".png"
nodeOjb.ForeColor = Color.Red
nodeParent.Add(nodeOjb)
Exit Select
Case ".ico"
nodeOjb.ForeColor = Color.Green
nodeParent.Add(nodeOjb)
Exit Select
Case ".url"
nodeOjb.ForeColor = Color.Black
nodeParent.Add(nodeOjb)
Exit Select
End Select
End If
Next
End Sub
Затем, когда вы звоните в первый раз, вы делаете это так:
PopulateTree(Nothing, "", 0)
Вы передаете пустую ссылку для первого вызова, чтобы она использовала родителя. Второй параметр - это ваш путь.
p.s. Я в основном C # парень, поэтому я использовал конвертер, чтобы изменить код. Это должно сработать, но вам, возможно, придется немного подправить.