Программирование >>  Web ориентированные приложения 

1 ... 10 11 12 [ 13 ] 14 15 16


BackgroundColor в цвет по умолчанию. После этого значение передается базовому объекту, чтобы текстовое поле действительно стало доступным в соответствии со значением параметра. Как видим, переопределение одного простого свойства позволяет добавить новую функциональность к элементу управления.

Атрибуты элемента управления

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

Таблица 31.5. Часто используемые атрибуты заказных элементов управления Имя атрибута Описание

BindableAttribute Используется во время проектирования для определения того, под-

держивает ли свойство двустороннюю привязку данных.

BrowsableAttribute Определяет, должно ли свойство отображаться в визуальном дизайнере.

CategoryAttribute Определяет, под какой категорией свойство отображается в окне

свойств. Использует предопределенные категории либо позволяет создавать новые. По умолчанию - Misc.

DefaultEventAttribute Специфицирует событие по умолчанию для класса.

DefaultPropertyAttribute Специфицирует свойство по умолчанию для класса.

DefaultValueAttribute Специфицирует значение по умолчанию для свойства. Обычно это

начальное значение.

DecriptionAttribute Текст, появляющийся в нижней части окна дизайнера при выборе свойства. DesignOnlyAttribute Помечает свойство как редактируемое только в режиме проектирования.

Доступны также другие атрибуты, имеющие отношение к редактору, используемому в процессе проектирования, а также другие расширенные возможности времени проектирования. Почти всегда должны быть добавлены атрибуты Category и Description. Это помогает другим разработчикам, использующим элемент управления, лучше понимать назначение свойства. Чтобы добавить поддержку средства IntelliSense, следует добавлять XML-комментарий к каждому свойству, методу и событию. Когда элемент управления компилируется с опцией /doc, сгенерированный XML-файл комментариев представляет элементу управления поддержку IntelliSense.

Заказной элемент управления на базе TreeView

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

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

□ читать папки и файлы и отображать их пользователю;

□ отображать структуру папок в древовидном иерархическом представлении;

□ необязательно скрывать файлы от представления;

□ определять папку, которая будет служить базовой корневой папкой;

□ возвращать текущую выбранную папку;

□ предоставлять возможность отложить загрузку файловой структуры.



Это может служить хорошей начальной точкой. Одно из требований удовлетворяется самим фактом наследования нового элемента управления от TreeView.

Элемент управления TreeView отображает данные в иерархическом виде. Он показывает текст, описывающий объект в списке, и необязательно - пиктограмму. Список может открываться и закрываться щелчком на объекте или нажатием клавиш со стрелками.

Создадим в Visual Studio .NET новый проект Windows Control Library с именем FolderTree и удалим из него класс UserControl1. Добавим новый класс и назовем его FolderTree. Поскольку FolderTree будет наследоваться от TreeView, изменим объявление класса

public class FolderTree

public class FolderTree : System.Windows.Forms.TreeView

В этот момент мы уже получаем полностью функциональный работающий элемент управления FolderTree. Он делает все, что может делать TreeView, но не более того. Элемент управления TreeView поддерживает коллекцию объектов TreeNode. Мы не можем загружать файлы и папки непосредственно в этот элемент управления. Существует несколько возможностей отобразить узлы TreeNode, которые загружаются в коллекцию Nodes, принадлежащую TreeView, на папки и файлы, которые они представляют.

Например, когда обрабатывается каждая папка, создается новый объект TreeNode, и его свойство text принимает значение имени папки или файла. Если в какой-то момент понадобится некоторая дополнительная информация о файле или папке, можно выполнить еще одно обращение к диску, чтобы получить эту информацию, или же сохранить дополнительные данные относительно файла или папки в свойстве Tag.

Другой метод заключается в создании нового класса-наследника TreeNode. В дополнение к его базовой функциональности можно добавить ряд новых методов и свойств. Именно таким путем мы и пойдем в этом примере. Это обеспечит возможность более гибкого дизайна. Если нужны новые свойства, их можно легко добавлять, не затрагивая существующего кода.

В элемент управления нужно загружать два типа объектов: папки и файлы. Каждый из них обладает своими собственными характеристиками. Например, каждая папка включают объект DirectoryInfo, который содержит дополнительную информацию, а файл - объект FileInfo. Из-за этого отличия мы будем использовать два разных класса для загрузки элемента управления TreeView: FileNode и FolderNode. Добавим эти два класса в проект, при этом унаследуем каждый из них от TreeNode. Ниже показан код FileNode.

namespace FormsSample.SampleControls

public class FileNode : System.Windows.Forms.TreeNode

string fileName = ;

FileInfo info;

public FileNode(string fileName)

fileName = fileName; info = new FileInfo( fileName); base.Text = info.Name; if ( info.Extension.ToLower() == .exe )

this.ForeColor = System.Drawing.Color.Red;

public string FileName



get { return fileName; } set { fileName = value; }

public FileInfo FileNodeInfo

get { return info; }

Имя обрабатываемого файла передается конструктору FileNode. В конструкторе создается объект FileInfo для файла и присваивается переменной-члену info. Свойство base.Text устанавливается равным имени файла. Поскольку мы наследуем данный класс от TreeNode, это устанавливает свойство Text класса TreeNode. Это - текст, который будет отображен в элементе управления TreeView.

Далее добавляются два свойства для извлечения данных. FileName возвратит имя файла, а FileNodeInfo - объект FileInfo, описывающий файл.

Ниже представлен код класса FolderNode. Он очень похож на структуру класса FileNode. Разница состоит в том, что вместо свойства FileInfo здесь представлено свойство DirectoryInfo, а вместо FileName - FolderPath.

namespace FormsSample.SampleControls

public class FolderNode : System.Windows.Forms.TreeNode

string folderPath = ; DirectoryInfo info;

public FolderNode(string folderPath)

folderPath = folderPath;

info = new DirectoryInfo(folderPath); this.Text = info.Name;

public string FolderPath

get { return folderPath; } set { folderPath = value; }

public DirectoryInfo FolderNodeInfo

get { return info; }

Теперь можно конструировать элемент управления FolderTree. В соответствии с требованиями, нам понадобится свойство для чтения и установки RootFolder. Также понадобится свойство ShowFiles для определения того, должны ли отображаться файлы в дереве. Свойство SelectedFolder вернет текущую выделенную папку в дереве. Таким образом, код элемента управления FolderTree будет выглядеть, как показано ниже:

using System;

using System.Windows.Forms; using System.IO; using System.ComponentModel; namespace FolderTree



1 ... 10 11 12 [ 13 ] 14 15 16

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.002
При копировании материалов приветствуются ссылки.
Яндекс.Метрика