ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 05.12.2023

Просмотров: 41

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Элемент TreeViewTreeView представляет визуальный элемент в виде дерева. Дерево содержит узлы, которые представляют объекты TreeNode. Узлы могут содержать другие подузлы и могут находиться как скрытом, так и в раскрытом состоянии. Все узлы содержатся в свойстве Nodes.Если мы нажем в панели Свойств на свойство Nodes, то нам откроется окно редактирования узлов TreeView:В этом окне мы можем добавить новые узлы, создать для них подузлы, удалить уже имеющиеся, настроить свойства узлов. Рассмотрим некоторые свойства, которые мы здесь может установить:BackColor: фоновый цвет узлаChecked: если равно true, то данный узел будет отмечен флажкомNodeFont: шрифт узлаForeColor: цвет шрифтаText: текст узлаImageIndex: получает или задает индекс изображения, выводимого для данного узлаImageKey: получает или задает индекс изображения для данного узлаSelectedImageKey: получает или задает индекс изображения для данного узла в выбранном состоянииSelectedImageIndex: получает или задает индекс изображения, выводимого для данного узла в выбранном состоянииStateImageIndex: получает или задает индекс изображения состояния (например установленного или снятого флажка, указывающего состояние элемента)Tag: тег узлаИ затем все добавленные узлы мы сможем увидеть в приложении на форме:Кроме данных свойств, управляющих визуализацией, элемент TreeNode имеет еще ряд важных свойств, которые мы можем использовать к коде:FirstNode: первый дочерний узелLastNode: последний дочерний узелNextNode: возвращает следующий сестринский узел по отношению к текущемуNextVisibleNode: возвращает следующий видимый узел по отношению к текущемуPrevNode: возвращает предыдущий сестринский узел по отношению к текущемуPrevVisibleNode: возвращает предыдущий видимый узел по отношению к текущемуNodes: возвращает коллекцию дочерних узловParent: возвращает родительский узел для текущего узлаTreeView: возвращает объект TreeView, в котором определен текущий узелПрограммное управление узлами
Рассмотрим программное добавление и удаление узлов:TreeNode tovarNode = new TreeNode("Товары"); // Добавляем новый дочерний узел к tovarNodetovarNode.Nodes.Add(new TreeNode("Смартфоны")); // Добавляем tovarNode вместе с дочерними узлами в TreeViewtreeView1.Nodes.Add(tovarNode); // Добавляем второй очерний узел к первому узлу в TreeViewtreeView1.Nodes[0].Nodes.Add(new TreeNode("Планшеты")); // удаление у первого узла второго дочернего подузлаtreeView1.Nodes[0].Nodes.RemoveAt(1); // Удаление узла tovarNode и всех его дочерних узловtreeView1.Nodes.Remove(tovarNode);Скрытие и раскрытие узловДля раскрытия узлов к объекту TreeNode применяется метод Expand(), а для скрытия - метод Collapse():// раскрытие узлаtovarNode.Expand();// раскрытие не только узла, но и всех его дочерних подузловtovarNode.ExpandAll();// скрытие узлаtovarNode.Collapse();Добавление чекбоксовЧтобы добавить чекбоксы к узлам дерева, надо у TreeView установить свойство CheckBoxes = true:treeView1.CheckBoxes = true;TreeNode smartNode = new TreeNode("Смартфоны");smartNode.Checked = true;treeView1.Nodes.Add(smartNode);treeView1.Nodes.Add(new TreeNode("Планшеты"));treeView1.Nodes.Add(new TreeNode("Ноутбуки"));Добавление изображенийДля добавления изображений нам нужен компонент ImageList, в котором имеется несколько картинок. Добавим эти картинки к узлам:// установка источника изображенийtreeView1.ImageList = imageList1;TreeNode argentinaNode = new TreeNode { Text = "Аргентина", ImageIndex=0, SelectedImageIndex=0 };treeView1.Nodes.Add(argentinaNode);TreeNode braziliaNode = new TreeNode { Text = "Бразилия", ImageIndex = 1, SelectedImageIndex=1 };treeView1.Nodes.Add(braziliaNode);TreeNode chilieNode = new TreeNode { Text = "Чили", ImageIndex = 2, SelectedImageIndex=2 };treeView1.Nodes.Add(chilieNode);TreeNode columbiaNode = new TreeNode { Text = "Колумбия", ImageIndex = 3, SelectedImageIndex=3 };treeView1.Nodes.Add(columbiaNode);При установке изображений надо учитывать, что если мы не установим свойство SelectedImageIndex для каждого узла, то в качестве картинки для выделенного узла по умолчанию будет использоваться первое изображение из ImageList.TreeView имеет ряд событий, которые позволяют нам управлять деревом. Наиболее важные из них:BeforeSelect / AfterSelect: срабатывает перед / после выбора узла дереваBeforeExpand / AfterExpand: срабатывает перед / после раскрытия узла дереваBeforeCollapse / AfterCollapse: срабатывает перед / после скрытия узла дереваTreeView. Практический примерВыполним небольшую задачу с TreeView. А именно попробуем сделать примитивный интерфейс на подобие проводника. Для этого добавим на форму элемент TreeView. А в файле кода формы пропишим следующий код:

using System;using System.Collections.Generic;using System.ComponentModel;using System.IO;using System.Windows.Forms;namespace HelloApp{public partial class Form1 : Form{public Form1(){InitializeComponent();treeView1.BeforeSelect += treeView1_BeforeSelect;treeView1.BeforeExpand += treeView1_BeforeExpand; // заполняем дерево дискамиFillDriveNodes();}// событие перед раскрытием узлаvoid treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e){e.Node.Nodes.Clear();string[] dirs;try{if (Directory.Exists(e.Node.FullPath)){dirs = Directory.GetDirectories(e.Node.FullPath);if (dirs.Length != 0){for (int i = 0; i < dirs.Length; i++){TreeNode dirNode = new TreeNode(new DirectoryInfo(dirs[i]).Name);FillTreeNode(dirNode, dirs[i]);e.Node.Nodes.Add(dirNode);} } } }catch (Exception ex) { }}// событие перед выделением узлаvoid treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e){e.Node.Nodes.Clear();string[] dirs;try{if(Directory.Exists(e.Node.FullPath)){dirs = Directory.GetDirectories(e.Node.FullPath);if (dirs.Length!= 0){for(int i=0; i{TreeNode dirNode = new TreeNode(new DirectoryInfo(dirs[i]).Name);FillTreeNode(dirNode, dirs[i]);e.Node.Nodes.Add(dirNode);} } } }catch (Exception ex) { }}// получаем все диски на компьютереprivate void FillDriveNodes(){try{foreach(DriveInfo drive in DriveInfo.GetDrives()){TreeNode driveNode = new TreeNode { Text = drive.Name };FillTreeNode(driveNode, drive.Name);treeView1.Nodes.Add(driveNode);}}catch (Exception ex) { }}// получаем дочерние узлы для определенного узлаprivate void FillTreeNode(TreeNode driveNode, string path){try{string[] dirs = Directory.GetDirectories(path);foreach (string dir in dirs){TreeNode dirNode = new TreeNode();dirNode.Text = dir.Remove(0, dir.LastIndexOf("\\") + 1);driveNode.Nodes.Add(dirNode);}}catch (Exception ex) { }} } }