c# Как создать и добавить узел в TreeView?

Создание и добавление узлов в элементе TreeView

В данной статье хочу показать на простом примере, как можно программно создавать и добавлять узлы в элементе управления TreeView.

Создание узлов

Каждый узел в элементе TreeView представляет собой объект класса TreeNode.

//создание узла
TreeNode node = new TreeNode();

С помощью свойств: Name и Text можно задать имя и лейбл (текст, который будет отображаться в элементе TreeView) для созданного узла.

TreeNode node = new TreeNode();
node.Name = "friends";
node.Text = "друзья";
//либо
TreeNode node = new TreeNode() { Name = "friends", Text = "друзья" };

Создание и добавление корневых узлов

Элемент управления TreeView используется для вывода данных в виде дерева. Самый первый узел дерева, к которому затем крепятся все остальные узлы, называется корневым. В одном элементе TreeView может быть несколько корневых узлов.

//создание корневого узла
TreeNode rootNode = new TreeNode();
rootNode.Name = "auto";
rootNode.Text = "автомобили";

Чтобы добавить созданный корневой узел в элемент TreeView его нужно поместить в коллекцию типа TreeNodeCollection, доступ к которой можно получить с помощью свойства Nodes.

Для добавления новых элементов в коллекцию используются методы Add и AddRange.

TreeNode rootNode = new TreeNode();
rootNode.Name = "auto";
rootNode.Text = "автомобили";
//добавляем корневой узел в TreeView
treeView1.Nodes.Add(rootNode);

корневой узел

Метод Add позволяет не только добавлять новые узлы, но и создавать их. Например, корневой узел auto можно создать и добавить следующим образом:

treeView1.Nodes.Add("auto", "автомобили");

Создание и добавление дочерних узлов

Любой узел, добавленный к уже существующему узлу дерева, называется дочерним.

Давайте рассмотрим, как создать дочерний узел marka и добавить его к корневому узлу car.

TreeNode rootNode = new TreeNode();
rootNode.Name = "auto";
rootNode.Text = "автомобили";
treeView1.Nodes.Add(rootNode);
//создаём дочерний узел
TreeNode markaNode = new TreeNode();
markaNode.Name = "marka";
markaNode.Text = "марки";
//добавляем дочерний узел к корневому узлу
rootNode.Nodes.Add(markaNode);

Либо можно создать и добавить этот дочерний узел другим путем:

TreeNode rootNode = new TreeNode();
rootNode.Name = "auto";
rootNode.Text = "автомобили";
treeView1.Nodes.Add(rootNode);
rootNode.Nodes.Add("marka", "марки");

Коллекция Nodes

Далее рассмотрим, как работать с коллекцией Nodes элемента управления TreeView.

В первом примере создадим и добавим всё тот же дочерний узел marka к корневому узлу car.

TreeNode rootNode = new TreeNode();
rootNode.Name = "auto";
rootNode.Text = "автомобили";
treeView1.Nodes.Add(rootNode);
//получаем первый элемент коллекции (корневой узел)
TreeNode autoNode = treeView1.Nodes[0];
//либо
//TreeNode autoNode = treeView1.Nodes["auto"];
//создаём и добавляем дочерний узел
autoNode.Nodes.Add("marka", "марки");

В квадратных скобках указывается либо индекс элемента, либо его имя.

Каждый узел в элементе TreeView хранит все дочерние узлы внутри всё той же коллекции типа TreeNodeCollection, доступ к которой также осуществляется с помощью свойства Nodes.

Выше приведённый код можно сократить:

//первый вариант
treeView1.Nodes.Add("auto", "автомобили");
treeView1.Nodes[0].Nodes.Add("marka", "марки");
//второй вариант
treeView1.Nodes.Add("auto", "автомобили").Nodes.Add("marka", "марки");

дочерний узел

В следующем примере создадим два дочерних узла и добавим их к узлу marka.

treeView1.Nodes[0].Nodes[0].Nodes.Add("bmw", "BMW");
treeView1.Nodes["auto"].Nodes["marka"].Nodes.Add("toyota", "Toyota");

узлы

К каждой марки автомобиля добавим по одной модели.

//auto\marka\bmw
treeView1.Nodes[0].Nodes[0].Nodes[0].Nodes.Add("name", "x5");
//auto\marka\toyota
treeView1.Nodes[0].Nodes[0].Nodes[1].Nodes.Add("name", "Camry");

модели

Добавим ещё несколько моделей для каждой марки авто.

//auto\marka\bmw
treeView1.Nodes[0].Nodes[0].Nodes[0].Nodes.Add("name", "x3");
treeView1.Nodes[0].Nodes[0].Nodes[0].Nodes.Add("name", "x6");

узел bmw

treeView1.Nodes["auto"].Nodes["marka"].Nodes["toyota"].Nodes.Add("name", "Corona");
treeView1.Nodes["auto"].Nodes["marka"].Nodes["toyota"].Nodes.Add("name", "Corolla");

узел toyota

Получается довольно длинная запись, которую можно сократить, например следующим образом:

TreeNode bmwNode = treeView1.Nodes[0].Nodes[0].Nodes[0];
bmwNode.Nodes.Add("name", "x3");
bmwNode.Nodes.Add("name", "x6");
TreeNode toyotaNode = treeView1.Nodes["auto"].Nodes["marka"].Nodes["toyota"];
toyotaNode.Nodes.Add("name", "Corona");
toyotaNode.Nodes.Add("name", "Corolla");

К узлу x5 добавим два дочерних узла

//auto\marka\bmw\x5
TreeNode x5Node = treeView1.Nodes[0].Nodes[0].Nodes[0].Nodes[0];
//либо можно обратиться к созданному ранее узлу bmwNode
//TreeNode x5Node = bmwNode.Nodes[0];
x5Node.Nodes.Add("speed", "скорость");
x5Node.Nodes.Add("price", "цвет");

дочерние узлы

Добавим значения для узлов: speed и price.

x5Node.Nodes[0].Nodes.Add("value", "250");
x5Node.Nodes[1].Nodes.Add("value", "чёрный");

свойство Nodes

Теперь создадим и добавим один дочерний узел к модели Toyota Corona.

//auto\marka\toyota
TreeNode toyotaCorona = treeView1.Nodes[0].Nodes[0].Nodes[1].Nodes[1];
toyotaCorona.Nodes[1].Nodes.Add("color", "цвет");
//либо используем ранее созданный узел toyotaNode
TreeNode toyotaCorona = toyotaNode.Nodes[1];
toyotaCorona.Nodes.Add("color", "цвет");

treeview

Добавим два узла: speed и price для всех автомобилей марки Toyota.

toyotaNode.Nodes[0].Nodes.Add("speed", "скорость");
toyotaNode.Nodes[0].Nodes.Add("price", "цвет");
toyotaNode.Nodes[1].Nodes.Add("speed", "скорость");
toyotaNode.Nodes[1].Nodes.Add("price", "цвет");
toyotaNode.Nodes[2].Nodes.Add("speed", "скорость");
toyotaNode.Nodes[2].Nodes.Add("price", "цвет");

При добавлении одинаковых узлов лучше использовать цикл:

foreach (TreeNode model in toyotaNode.Nodes)
{
model.Nodes.Add("speed", "скорость");
model.Nodes.Add("price", "цена");
}

создание узла

Добавляем дочерний узел value для каждой модели марки Toyota.

foreach (TreeNode model in toyotaNodes.Nodes)
{
if (model.Text == "Camry")
model.Nodes["speed"].Nodes.Add("value", "250");
else if (model.Text == "Corona")
model.Nodes["speed"].Nodes.Add("value", "200");
else if (model.Text == "Corolla")
model.Nodes["speed"].Nodes.Add("value", "210");
}

добавление узла

Добавление второго корневого узла.

treeView1.Nodes.Add("moto", "Мотоциклы");

32

Создаём и добавляем дочерний узел к второму корневому узлу.

treeView1.Nodes[1].Nodes.Add("marka", "марки");

второй корневой узел

Добавим несколько марок мотоциклов.

//moto\marka
TreeNode markaNode = treeView1.Nodes[1].Nodes[0];
markaNode.Nodes.Add("name", "yamaha");
markaNode.Nodes.Add("name", "suzuki");

узлы дерева

Создаём и добавляем два дочерних узла: model и name к ранее созданному родительскому узлу yamaha.

TreeNodeCollection markiMoto = markaNode.Nodes;
markiMoto[0].Nodes.Add("model", "модель");
//model\yamaha
markiMoto[0].Nodes[0].Nodes.Add("name", "trx850");

добавление дочернего узла

В следующем примере показано, как найти узел в элементе TreeView и добавить к нему два дочерних узла.

foreach (TreeNode marka in markiMoto)
{
if (marka.Text == "suzuki")
marka.Nodes.Add("color", "цвет").Nodes.Add("value", "красный");
}

дерево treeview

Читайте также:

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*