Как добавить ребенка ребенка?

116
18

Я новичок в С# и задаю простой вопрос о TreeView.

Я хочу сделать что-то вроде этого:

> -Root
> -child1
> -child2
> -child3
> -....

У меня есть это:

child.Text = des[j];
root.Nodes.Add(child);

Но это просто дает что-то вроде этого:

> -Root
> -child1

Я хочу:

    Быть ребенком ребенка. Чтобы создать 10 TreeNodes в инструкции for.

С разными именами: root1, root2, root3 и т.д.

for (i = 0; i < 10; i++)
{
TreeNode root = new TreeNode();
}

спросил(а) 2013-08-01T17:59:00+04:00 7 лет, 3 месяца назад
1
Решение
58

Вам нужно добавить TreeNode в коллекцию узлов дочернего элемента, а не в корневой каталог.

child.Text = des[j];

root.Nodes.Add(child);

TreeNode NextChild = new TreeNode();
NextChild.Text = "something";
child.Nodes.Add(NextChild);

Для вашего второго Вопроса вам нужно будет хранить эти treenodes в какой-то структуре данных. Если вы хотите назвать все, хеш-таблица будет хорошей ставкой.

Hashtable myHT = new Hashtable();

for (int i = 0; i < 10; i++)

{

TreeNode root = new TreeNode();
myHT.Add("Root" + i, root);

}

Затем вы могли бы получить к ним доступ,

TreeNode myRoot = (TreeNode)myHT["Root1"];

Если вам удобнее использовать Generics, вы можете использовать System.Collections.Generic.Dictionary вместо общей версии.

ответил(а) 2013-08-01T18:17:00+04:00 7 лет, 3 месяца назад
41

Вам нужно только отслеживать текущий узел и дочерний элемент, который нужно вставить.

    При i = 0 текущее значение узла является корневым узлом. При i > 0 текущее значение узла является последним вставленным дочерним узлом.

Тогда вы можете попробовать что-то вроде этого...

TreeNode current = new TreeNode(); // Root node.
current.Text = string.Format("Root");
for (int i = 0; i < 10; i++)
{
TreeNode child = new TreeNode();
child.Text = string.Format("Child: {0}", i);
current.Nodes.Add(child);
current = child;
}

Результатом этого кода будет:

    корень
      Ребенок: 0
        Ребенок: 1
          Ребенок: 2

ответил(а) 2013-08-01T18:07:00+04:00 7 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема