C # - TreeView: вставка узла в определенной позиции - PullRequest
4 голосов
/ 02 декабря 2010

Как вставить новый дочерний элемент в определенный узел в TreeView в C # WinForms?

Я неуклюже наносил удары по TreeViews в течение почти часа, и я бы хотел использовать TreeView в C # следующим образом:

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

Вот что я попробовал в последний раз (я думаю, что это уровень волосатости, которого C # никогда бы не позволил мне достичь):

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

Само собой разумеется, это не работает.

О, и вот ленивый вопрос: можете ли вы на самом деле хранить объекты в этих узлах? Или TreeNode поддерживает только строки и еще много чего? (в этом случае я должен расширить TreeNode .. / вздох)

Пожалуйста, помогите, спасибо!

Ответы [ 4 ]

6 голосов
/ 02 декабря 2010

На самом деле ваш код должен работать - для добавления подузла вам просто нужно сделать:

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 для использования пользователями.

Ran

6 голосов
/ 02 декабря 2010

Вы можете использовать Вставить вместо Добавить.

tree.Nodes[item.name].Nodes.Insert(2, (new TreeNode("thing")));
3 голосов
/ 02 декабря 2010

Ну, для начала, да, вы можете хранить объекты в каждом узле. Каждый узел имеет свойство 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);
0 голосов
/ 02 декабря 2010

В противном случае, если ответ Давиты не идеален, вам нужно сохранить ссылку на узлы, поэтому, если у вас была ссылка на Боба, вы можете добавить собаку Боба

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

...