Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 15:

Стандартные элементы управления

Элемент древовидного представления TreeView

Элемент управления TreeView отображает информацию в виде иерархического дерева с узловыми элементами типа TreeNode. Каждый узел TreeNode может быть родителем других узлов того же типа. Непосредственные потомки текущего узла-родителя указаны в свойстве Nodes типа TreeNodeCollection. По умолчанию узлы TreeNode дерева TreeView свернуты и имеют слева значок " + ", щелчок на котором разворачивает узел и появляется значок " - ". Программное управление сворачиванием/разворачиванием узлов выполняется методами Expand(), ExpandAll(), Collapse(), Toggle() объекта TreeNode, а его булевы свойства IsExpanded и IsSelected позволяют выяснить, развернут или выделен соответствующий узел.

Управление видимостью значков и линий связи всего дерева выполняется с помощью булевых свойств ShowPlusMinus, ShowRootLines, ShowLines объекта TreeView. Его свойство SelectedNode позволяет получить или задать выделенный узел дерева просмотра.

Элемент TreeView имеет набор событий, которые реагируют на действия пользователя, например: BeforeSelect, AfterSelect, BeforeExpand, AfterExpand, BeforeCollapse, AfterCollapse. В обработчиках этих события можно организовать нужную логику работы дерева просмотра.

Приведем пример простой программы построения дерева, отображающего дерево каталогов диска C: текущего компьютера.

using System;
using System.Drawing;
using System.Windows.Forms;
// Пространство имен для работы с каталогами
using System.IO;
    
namespace Test
{
    // Класс приложения
    class MyClass : Form
    {
        public MyClass()    // Конструктор
        {
            this.Text = "Простое дерево каталогов";
            this.FormBorderStyle = FormBorderStyle.FixedSingle;
            // Замыкаем размеры
            this.MaximizeBox = false;
            this.StartPosition = FormStartPosition.CenterScreen;
    
            // Создаем объект дерева
            TreeView tree = new TreeView();
            // Привязываем к форме
            tree.Parent = this;
            // Разварачиваем на всю форму
            tree.Dock = DockStyle.Fill;
    
            // Создаем корневой узел
            TreeNode nodeDriveC = new TreeNode("C:\\");
            // Добавляем корневой узел к дереву просмотра
            tree.Nodes.Add(nodeDriveC);
            // Развертываем корневой узел
            nodeDriveC.Expand();
    
            // Считываем дерево каталогов
            AddDirectories(nodeDriveC);
        }
    
        // Рекурсивный метод
        void AddDirectories(TreeNode node)
        {
            // Для текущего узла node получаем полный путь к корню дерева
            string strPath = node.FullPath;
            // Создаем объект текущего каталога
            DirectoryInfo dirInfo = new DirectoryInfo(strPath);
            // Объявляем ссылку на массив подкаталогов текущего каталога
            DirectoryInfo[] arrayDirInfo;
    
            try
            {
                // Пытаемся получить список подкаталогов
                arrayDirInfo = dirInfo.GetDirectories();
            }
            catch
            {
                // Подкаталогов нет, выходим из рекурсии
                return;
            }
    
            // Добавляем прочитанные подкаталоги как узлы в дерево просмотра
            foreach (DirectoryInfo dir in arrayDirInfo)
            {
                // Создаем новый узел с именем подкаталога
                TreeNode nodeDir = new TreeNode(dir.Name);
                // Добавляем его как дочерний к текущему узлу
                node.Nodes.Add(nodeDir);
                // Развертываем узел
                //nodeDir.Expand();
                // Делаем дочерний узел текущим и спускаемся рекурсивно ниже
                AddDirectories(nodeDir);
            }
        }
    }
    
    // Запуск
    class Program
    {
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new MyClass());
        }
    }
}
Листинг 15.7 . Применение TreeView для просмотра дерева каталогов

Если запустить эту программу, то можно заметить, что хоть она и выполняет все правильно, но очень долго (ужасно долго!) сканирует файловую систему диска (непростая работа).

Вот ее внешний вид


Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?

Денис Пашков
Денис Пашков
Россия
Татьяна Ковалюк
Татьяна Ковалюк
Украина, Киев, Киевский политехнический институт, 1974