是否在VB.NET中添加嵌套的Treeview节点?
我正在尝试向TreeView控件添加一些项:是否在VB.NET中添加嵌套的Treeview节点?,vb.net,treeview,Vb.net,Treeview,我正在尝试向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) 有什么想法吗?谢谢:)假设您想要的结构如下所示: key1 -- key2
TV1.Nodes.Add("key1", "Test1") 'Works
TV1.Nodes("key1").Nodes.Add("key2", "Test2") 'Works (Nested)
TV1.Nodes("key2").Nodes.Add("key3", "Test3") 'Error (NullReferenceException)
有什么想法吗?谢谢:)假设您想要的结构如下所示:
key1
-- key2
-- key3
最后一行应该是:
TV1.Nodes(“key1”).Nodes(“key2”).Nodes.Add(“key3”、“Test3”)
或与
key1
-- key2
-- key3
使用
TV1.Nodes(“key1”).Nodes.Add(“key3”、“Test3”)
我自己想出来了:
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")
这里有一个简单的方法
您可以使它更简单-只要使用IsNot检查并继续添加父节点是否存在
BlueColorMan谢谢汤姆-我需要的是第一个解决方案。但还有更简单的方法吗?如果树节点由数百个嵌套项组成,是否有方法使用父节点的键添加子节点?不用担心!理想情况下,您应该使用递归例程通过传入Add函数返回的“parent”节点来加载treeview。这样你就只需要说
parent.Add(数据,文本)
看这篇文章:链接到网上的资料是可以的,但是你能在回答中提供一个简单的例子吗?
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