2011-07-12 7 views
1

私は、ツリービューコントロールにいくつかの項目を追加しようとしています:VB.NETでネストされたツリービューノードを追加しますか?

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

と私はそれを考え出した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

Tomに感謝します。私が必要とするのは最初の解決策です。しかし、もっと簡単な方法がありますか?ツリーノードが数百のネストされたアイテムで構成されている場合、親のキーを使用して子を追加する方法はありますか? – 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 
関連する問題