Главная страница
Навигация по странице:

  • Программное управление узлами

  • Скрытие и раскрытие узлов

  • Добавление чекбоксов

  • Добавление изображений

  • Элемент TreeView. Элемент TreeView


    Скачать 17.32 Kb.
    НазваниеЭлемент TreeView
    Дата04.05.2023
    Размер17.32 Kb.
    Формат файлаdocx
    Имя файлаЭлемент TreeView.docx
    ТипДокументы
    #1109322

    Элемент TreeView

    TreeView представляет визуальный элемент в виде дерева. Дерево содержит узлы, которые представляют объекты 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("Товары"); // Добавляем новый дочерний узел к tovarNode

    tovarNode.Nodes.Add(new TreeNode("Смартфоны")); // Добавляем tovarNode вместе с дочерними узлами в TreeView

    treeView1.Nodes.Add(tovarNode); // Добавляем второй очерний узел к первому узлу в TreeView

    treeView1.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) { }

    } } }


    написать администратору сайта