Первая проблема, с которой вы столкнетесь, - это исключение, основанное на вашем заявлении for; Вы должны либо изменить его на:
For i As Integer = 0 To arrLinks.Length - 1
или, мои предпочтения:
For each nodeKey as String in arrLinks
Следующая проблема заключается в том, что коллекция узлов не содержит все узлы во всем дереве, она содержит только узлы верхнего уровня. Каждый узел в этом списке имеет свой собственный набор дочерних узлов, и каждый из этих дочерних узлов имеет дочерние узлы и т. Д.
Это означает, что при добавлении каждого узла вам необходимо отслеживать последний родительский узел и добавлять следующего дочернего к этому родительскому узлу или отслеживать текущую коллекцию узлов для уровня, к которому вы добавляете.
Это приведет к коду, подобному следующему (вам может потребоваться настроить имена классов для NodeCollection и Node и, возможно, оператор Add (не забывайте, если add возвращает Node или нет)):
Dim arrLinks() As String = Split(Url, "/")
Dim cNodes as NodeCollection
' Keep track of the current collection of nodes, starting with the tree's top level collection
cNodes = tvwDirs.Nodes
For each nodeKey As String in arrLinks
Dim currentNode as Node
If Not cNodes.ContainsKey(nodeKey) Then
' If the key is not in the current collection of nodes, add it and record the resultant record
currentNode = cNodes.Add(nodeKey, nodeKey)
Else
' Otherwise, record the current node
currentNode = cNodes(nodeKey)
End If
' Store the set of nodes that the next nodeKey will be added to
cNodes = currentNode.Nodes
Next