2017-12-15 3 views
1

子ノードに子ノードを追加します。ツリービューを使用して子ノードに子ノードを追加する

私は以下のコードを使用します。

treeView1.Nodes.Add("0"); 
treeView1.Nodes["0"].Nodes.Add("1"); 
treeView1.Nodes["1"].Nodes.Add("2"); 
treeView1.Nodes["2"].Nodes.Add("3"); 
treeView1.Nodes["3"].Nodes.Add("4"); 
treeView1.Nodes["1"].Nodes.Add("5"); 

これは私が望むものです。

0 
1 
    2 
    3 
    4 
    5 

ただし、常に失敗します。それは親ノードを見つけることはありません。私は何をすべきか ?

答えて

1

あなたが持っている問題は、のTreeView1制御のNodesコレクションは、ツリー内のすべてのノードのリストではないということです - それは唯一のリストですトップレベルノード。それが階層的になるのは、ツリーノードが子ノードのリストを含むことができることである。だから、あなたは、あなたの質問に定義されたツリー構造を得るために、あなたはこのような何かをしたいと思うでしょう:

private void AddTreeNodes() 
{ 
    // Create the root node. 
    TreeNode node = treeView1.Nodes.Add("0"); 

    // the root node has only one child node (1), so we will reuse the node object 
    node = node.Nodes.Add("1"); 

    // Now, the node is the parent of two nodes (2 and 5). 
    // We will want to keep track of node 2 because it has child nodes. 
    TreeNode anotherNode = node.Nodes.Add("2"); 

    // Since node 5 doesn't have any child nodes, we don't need to keep track of it in this example. 
    node.Nodes.Add("5"); 

    // Now, we need to make the child node of node 2. (Specifically, node 3). 
    node = anotherNode.Nodes.Add("3"); 

    // And finally add the child node of node 3. 
    node.Nodes.Add("4"); 
} 

ます。また、このようにそれを行うことができます:今

private void AddTreeNodes() 
{ 
    treeView1.Nodes.Add("0"); 
    treeView1.Nodes[0].Nodes.Add("1"); 
    treeView1.Nodes[0].Nodes[0].Nodes.Add("2"); 
    treeView1.Nodes[0].Nodes[0].Nodes.Add("5"); 
    treeView1.Nodes[0].Nodes[0].Nodes[0].Nodes.Add("3"); 
    treeView1.Nodes[0].Nodes[0].Nodes[0].Nodes[0].Nodes.Add("4"); 
} 

、私がいることを知っていますコードは醜いですが、これから取得するための主なアイデアは、次のとおりです。

  1. TreeView制御がTreeNodeオブジェクト(Nodes)のリストが含まれています。このリストは、ツリー内のすべてのノードのリストではなく、コントロールそのものの直接の子であるノードのリストです。
  2. 親ノードの下に存在する子ノードは、親ノードのTreeNodeオブジェクトのリストに追加する必要があります。
  3. すべてTreeNodeオブジェクトには、子であるTreeNodeオブジェクトのリストが含まれています。
  4. TreeNodeを別のノードまたはTreeViewコントロール自体に追加すると、新しいTreeNodeオブジェクトへの参照が返されます。
  5. TreeNodeのインデックスは、それが存在するリストに対してインデックスであり、階層全体に関するインデックスではありません。
  6. TreeNodeオブジェクトには、ツリーのナビゲートに役立ついくつかのプロパティがあります。 PrevNodeおよびNextNode(存在する場合)前または次の兄弟ツリーノードを取得します。Parentは現在のノードの親TreeNodeを取得します。
0

Nodes[string]が(ノードのテキストされていない)キー指定TreeNodeこのコレクションを探しているので、それは動作しません。

TreeNodeCollection.Addは、TreeNodeを返します。だから、さらに子ノードを追加するには、この戻り値を使用します。

TreeNode child = treeView1.Nodes.Add("0"); 
TreeNode child1 = child.Nodes.Add("1"); 
child1.Nodes.Add("2").Nodes.Add("3").Nodes.Add("4"); 
child1.Nodes.Add("5"); 
0

は、私はあなたがノードのテキストではなくキーでaccepts a string valueTreeNodeCollection.Addメソッドを使用していることに問題があると思われます。次に、キーを使用して他のノードを設定しようとします。

代わりに以下のことを試してみてください。

treeView1.Nodes.Add("0", "0"); 
treeView1.Nodes["0"].Add("1", "1"); 
treeView1.Nodes["0"].Nodes["1"].Add("2", "2"); 
関連する問題