4

C#WinFormsのTreeViewの特定のノードに新しい子を挿入するにはどうすればよいですか?

私は不器用にTreeViewsを1時間近く刺し続けており、C#のTreeViewを次のように使用したいと思います。

treeView.getChildByName("bob").AddChild(new Node("bob's dog"));

これが私が最後に試したものです(これは、C#が私に到達することを決して許してはならなかったはずの毛深いレベルにあると思います):

tree.Nodes[item.name].Nodes.Add(new TreeNode("thing"));

言うまでもなく、それは機能しません。

ああ、そしてここに怠惰な質問があります:あなたは実際にこれらのノードにオブジェクトを保存できますか?または、TreeNodeは文字列のみをサポートしますか?(この場合、TreeNodeを拡張する必要があります。./sigh)

助けてください、ありがとう!

4

4 に答える 4

6

追加の代わりに挿入を使用できます。

tree.Nodes[item.name].Nodes.Insert(2, (new TreeNode("thing")));
于 2010-12-01T21:20:10.553 に答える
6

実際、コードは機能するはずです。サブノードを追加するには、次のことを行う必要があります。

myNode.Nodes.Add(new TreeNode("Sub node"));

問題は、既存のノードを参照する方法にある可能性があります。tree.Nodes[item.Name] が null を返したと思いますか?

このインデクサーがノードを見つけるには、ノードを追加するときにキーを指定する必要があります。ノード名をキーとして指定しましたか? たとえば、次のコードは私にとってはうまくいきます。

treeView1.Nodes.Add("key", "root");
treeView1.Nodes["key"].Nodes.Add(new TreeNode("Sub node"));

私の答えがうまくいかない場合は、何が起こるかについて詳細を追加できますか? 何らかの例外が発生しましたか、それとも単に何も起こりませんでしたか?

PS: オブジェクトをノードに格納するには、Tag プロパティを使用する代わりに、TreeNode から独自のクラスを派生させて、そこに何かを格納することもできます。ライブラリを開発している場合、Tag プロパティをユーザーが使用できるようにしておくため、これはより便利です。

ラン

于 2010-12-01T21:24:14.870 に答える
3

さて、最初に、はい、各ノードにオブジェクトを格納できます。各ノードには、Tagタイプのプロパティがありますobject

ノードの追加はかなり簡単です。MSDNによると:

// Adds new node as a child node of the currently selected node.
TreeNode newNode = new TreeNode("Text for new node");
treeView1.SelectedNode.Nodes.Add(newNode);
于 2010-12-01T21:17:11.773 に答える
0

それ以外の場合、Davitaが完全な答えではない場合は、ノードへの参照を保持する必要があるため、bobへの参照がある場合は、bobの犬を追加できます。

TreeNode bob = new TreeNode( "bob"); treeView1.Nodes.Add(bob); bob.Nodes.Add(new TreeNode( "Dog"));

于 2010-12-01T21:21:30.927 に答える