2011-07-12 86 views
1

我想一些项目添加到TreeView控件:在VB.NET中添加嵌套Treeview节点?

TV1.Nodes.Add("key1", "Test1") 'Works 
    TV1.Nodes("key1").Nodes.Add("key2", "Test2") 'Works (Nested) 
    TV1.Nodes("key2").Nodes.Add("key3", "Test3") 'Error (NullReferenceException) 

什么想法?谢谢:)

+0

看到这个帖子: http://stackoverflow.com/questions/382928/how-to-add-nodes-to-a-wpf-treelist-using-vb-net- 2008 – Rob

回答

1

我想出了mysel F:

TV1.Nodes.Add("key1", "Test1") 
    TV1.Nodes.Find("key1", True)(0).Nodes.Add("key2", "Test2") 
    TV1.Nodes.Find("key2", True)(0).Nodes.Add("key3", "Test3") 
1

假设你想要的结构如下:

key1 
-- key2 
    -- key3 

最后一行应该是: TV1.Nodes("key1").Nodes("key2").Nodes.Add("key3", "Test3")

或用

key1 
-- key2 
-- key3 

使用TV1.Nodes("key1").Nodes.Add("key3", "Test3")

+0

谢谢汤姆 - 我需要的是第一个解决方案。但是有没有更简单的方法?如果Tree节点由数百个嵌套项目组成,是否有方法使用父项的键添加子项? – MilMike

+0

不用担心!理想情况下,您可以使用递归例程通过传入从Add函数返回的“父”节点来加载树视图。这样,你只需要说'parent.Add(data,text)' – Tom

0
Public Class Test 
    Dim CurrentNode As TreeNode 

    Private Sub Search_and_Add(CurrentNode As TreeNode, NodesListArray() As String, Pointer As Integer) 
    If Pointer >= NodesListArray.Length Then 
     Exit Sub 
    End If 

    Dim BasisNodeExists As Integer = 0 
    Dim BasisNodeGID As Integer = 0 

    If Pointer = 0 Then 
     For j As Integer = 0 To TreeView1.Nodes.Count - 1 
     If TreeView1.Nodes(j).Text = NodesListArray(j) Then 
      BasisNodeExists = 1 
      BasisNodeGID = j 
     End If 
     Next 

     If BasisNodeExists = 1 Then 
     Search_and_Add(TreeView1.Nodes.Item(BasisNodeGID), NodesListArray, Pointer + 1) 
     Else 
     TreeView1.Nodes.Add(New TreeNode(NodesListArray(Pointer))) 
     Search_and_Add(TreeView1.Nodes.Item(0), NodesListArray, Pointer + 1) 
     End If 
    Else 
     Dim NewEntryRequired As Integer = 1 
     For i As Integer = 0 To CurrentNode.Nodes.Count - 1 
     If CurrentNode.Nodes.Item(i).Text = NodesListArray(Pointer) Then 
      NewEntryRequired = 0 
     End If 
     Next 
     If NewEntryRequired = 1 Then 
     CurrentNode.Nodes.Add(New TreeNode(NodesListArray(Pointer))) 
     End If 
     For i As Integer = 0 To CurrentNode.Nodes.Count - 1 
     If CurrentNode.Nodes.Item(i).Text = NodesListArray(Pointer) Then 
      Search_and_Add(CurrentNode.Nodes.Item(i), NodesListArray, Pointer + 1) 
     End If 
     Next 
    End If 
    End Sub 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Search_and_Add(New TreeNode(), New String() {"1", "2", "3"}, 0) 
    End Sub 
End Class