Построение дерева папок и файлов на устройствах pc
![]()
|
Построение дерева папок и файлов на устройствах PCЗапустим Visual Studio (версия не важна). Создадим новый проект ![]() по шаблону C# - Windows Forms Application ![]() Наша цель создать экранную форму, в которой будут в виде древовидной структуры изображаться все папки и файлы на устройствах нашего компьютера. Для этого поместим на экранную форму элемент управления типа TreeView. Назовем этот элемент filesTree. ![]() Свойству Dock назначим значение Fill. Таким образом, этот элемент будет занимать все поле формы. Выберем этот элемент и создадим для него изначально пустые обработчики событий AfterExpand и AfterSelect. ![]() Выберем форму целиком и создадим для нее обработчик события Load. Это событие будет возникать при загрузке нашей формы. Поместим в обработчик этого события вызов метода FillTree(). Этот метод будет создавать начальное дерево. Рассмотрим этот метод подробно. DriveInfo[] allDrives = DriveInfo.GetDrives(); Массив allDrives будет содержать объекты класса DriveInfo, который хранит информацию об устройстве. Метод GetDrives() возвращает массив с информацией о всех устройствах системы. ![]() В цикле foreach (DriveInfo d in allDrives) { TreeNode trn = new TreeNode(d.Name); trn.Tag = d; filesTree.Nodes.Add(trn); мы пройдем по всем устройствам. Для каждого устройства создадим объект класса TreeNode. Этот класс предтставляет вершину в дереве элемента filesTree. В свойстве Tag сохраним ссылку на устройство d (тип DriveInfo). Для вершин, которые представляют устройства, зададим цвет фона LightCoral (При выполнении лабораторной работы подберите другой цвет, который будет лучше смотреться). Далее проверяем готово ли устройство для операций ввода/вывода. Если устройство готово, вычисляем размер свободного пространства на устройстве и формируем строку подсказки, которая будет всплывать, когда пользователь наведет курсор мышки на эту вершину. С каждым устройством система связывает корневую папку. Строка кода DirectoryInfo TheFolder = new DirectoryInfo(d.Name); создает объект класса DirectoryInfo, который содержит информацию о папке (директории по старинке). Далее каждая вершина TreeNode имеет коллекцию Nodes дочерних вершин. В следующем цикле мы проходим по всем папкам, которые находятся в корневой папке, и для каждой такой папки создаем вершину в дереве с цветом фона Cyan. В свойстве Tag сохранем ссылку на дочернюю папку. foreach (DirectoryInfo NextFolder in TheFolder.GetDirectories()) { TreeNode trn1 = new TreeNode(NextFolder.Name); trn.Nodes.Add(trn1); trn1.Tag = NextFolder; trn1.BackColor = Color.Cyan; } В следующем цикле делаем тоже самое, но только для вложенных файлов. foreach (FileInfo NextFile in TheFolder.GetFiles()) { TreeNode trn1 = new TreeNode(NextFile.Name); trn1.BackColor = Color.Green; trn.Nodes.Add(trn1); } Вершины, представляющие файлы будут зелеными. Итак метод FillTree() сформирует нижнюю часть дерева каталогов, которая растет непосредственно из корня. А как же с другими папками и файлами, которые находятся выше в дереве? А вот их мы будем добавлять в дерево постепенно по мере необходимости, когда пользователь будет раскрывать вершину дерева, нажимая на плюсик возле вершины. Это сделано потому, что нам просто может не хватить памяти, чтобы изобразить все дерево, и кроме того загрузка всего дерева будет занимать много времени. Поэтому мы создадим метод FillFolder, который будет добавлять дочерние вершины к папке ![]() И вызывать это метод в обработчике события AfterExpand ![]() Ну и наконец по событию выбора вершины, мы проверим, что эта вершина представляет файл, и выведем окно с датой создания этого файла. |