Создание собственных элементов управления
Платформа .NET Framework предоставляет возможности разработки и реализации новых элементов управления. Если нужно расширить функции существующего элемента управления, можно путем наследования создать элемент управления, производный от существующего. Можно также написать собственные элементы управления, выполняющие свое оформление.
Выбор типа создаваемого элемента управления может вызвать затруднения. В этом разделе описываются различия между типами элементов управления, которые можно наследовать, а также приводятся сведения о том, как выбрать тип для проекта.
Примечание
Дополнительные сведения о создании элемента управления для использования в конструкторе Web Forms см. в разделе Разработка пользовательских серверных элементов управления ASP.NET.
Базовый класс элемента управления
Класс Control является базовым классом элементов управления Windows Forms. Он обеспечивает инфраструктуру, необходимую для визуального отображения в приложениях Windows Forms.
Класс Control выполняет следующие задачи для обеспечения визуального отображения в приложениях Windows Forms:
Предоставление дескриптора окна.
Управление маршрутизацией сообщений.
Предоставление событий мыши и клавиатуры и многих других событий пользовательского интерфейса.
Предоставление расширенных функций размещения.
Большое число функций, относящихся к визуальному представлению, таких как ForeColor, BackColor, Height, и Width.
Предоставление безопасности и поддержки потоков, необходимых для элемента управления Windows Forms для действия элемента управления Microsoft® ActiveX®.
Благодаря такому разнообразию инфраструктуры, которое предоставляет базовый класс, разработать свой собственный элемент управления Windows Forms относительно просто.
Типы элементов управления
Windows Forms поддерживает три типа определяемых пользователем элементов управления: составной, расширенный и пользовательский. В следующих разделах описан каждый тип элемента управления и приводятся рекомендации по выбору типа для проектов пользователя.
Составные элементы управления
Составной элемент управления — это коллекция элементов управления Windows Forms, инкапсулированный в общий контейнер. Этот тип элемента управления часто называют пользовательским. Элементы управления, входящие в состав составных элементов управления, называются составляющими элементами управления.
Составной элемент управления хранит все функции, связанные с каждым составляющим элементом управления Windows Forms, и позволяет выборочно представлять и связывать их свойства. Кроме того, составной элемент управления также обеспечивает большое число функций обработки клавиатуры по умолчанию, не требуя дополнительных усилий для разработки со стороны пользователя.
Например, составной элемент управления может служить для отображения адресных данных заказчика из базы данных. Этот элемент управления может содержать элемент DataGridView для отображения полей базы данных, элемент BindingSource для обработки привязки к источнику данных, и элемент BindingNavigator для перемещения между записями. Свойства привязки данных могут быть представлены выборочно, а весь элемент управления можно упаковать и повторно использовать в разных приложениях. Пример такого типа составного элемента управления содержится в разделе Практическое руководство. Применение атрибутов к элементам управления Windows Forms.
Чтобы создать составной элемент управления, сделайте его производным от класса UserControl. Базовый класс UserControl обеспечивает клавиатурную маршрутизацию для дочерних элементов управления и позволяет им работать в группе. Дополнительные сведения см. в разделе Разработка составного элемента Windows Forms.
Рекомендации
Наследование класса UserControl имеет смысл следующем случае:
- Если требуется объединить функции нескольких элементов управления Windows Forms в один блок для повторного использования.
Расширенные элементы управления
Наследуемый элемент управления можно получить из любого существующего элемента Windows Forms. Такой подход позволяет сохранить все стандартные функции элемента управления Windows Forms, а затем расширить их путем добавления пользовательских свойств, методов или других функций. В этом случае, логику рисования базового элемента управления можно переопределить и расширить его пользовательский интерфейс, изменив внешний вид.
Например, можно создать производный от Button элемент управления, отслеживающий число раз его нажатия пользователем.
В некоторых элементах управления к графическому интерфейсу можно добавить пользовательское оформление путем переопределения метода OnPaint базового класса. В расширенной кнопке, отслеживающей нажатия, метод OnPaint можно переопределить для вызова базовой реализации OnPaint, а затем нарисовать число нажатий в одном углу клиентской области элемента управления Button.
Рекомендации
Наследование из элемента управления Windows Forms рекомендуется применять в следующих случаях:
Если большинство необходимых функций аналогичны функциям уже существующего элемента управления Windows Forms.
Если нестандартный графический интерфейс пользователя не требуется или необходимо разработать новый графический интерфейс для существующего элемента управления.
Пользовательские элементы управления
Другим способом разработки элемента управления является создание его с нуля путем наследования класса Control. Класс Control предоставляет все основные функции, необходимые элементам управления (включая события обработки мыши и клавиатуры), однако он не содержит функции для элемента управления и графический интерфейс.
Создание элемента управления путем наследования из класса Control — гораздо более сложная задача, чем наследование из UserControl или существующего элемента управления Windows Forms. Поскольку задача реализации в больше мере возлагается на пользователя, создаваемый элемент управления обладает большей гибкостью, чем составной или расширенный элемент управления, что позволяет подстроить его под конкретные потребности.
Для реализации элемента управления необходимо написать код для события OnPaint элемента управления, а также любой код для необходимой функции. Кроме того, метод WndProc можно переопределить и обработать сообщения Windows напрямую. Это является наиболее эффективным способом создания элемента управления, но для этого необходимо знать Microsoft Win32® API.
Примером пользовательского элемента управления служит элемент "Часы", который выглядит и действует аналогично часам со стрелками. Можно применить пользовательское оформление, чтобы заставить стрелки часов двигаться в зависимости от событий Tick внутреннего компонента Timer. Дополнительные сведения см. в разделе Руководство: Разработка простого элемента управления форм Windows Forms.
Рекомендации
Наследование класса Control имеет смысл следующем случае:
Если требуется определить пользовательское графическое представление элемента управления.
Если требуется реализовать пользовательские функции, которые недоступны в стандартных элементах управления.
Элементы управления ActiveX
Несмотря на то, что инфраструктура Windows Forms оптимизирована для работы с элементами управления Windows Forms, можно также использовать элементы управления ActiveX. Данная задача поддерживается в Visual Studio. Дополнительные сведения см. в разделе Практическое руководство. Добавление элементов управления ActiveX в формы Windows Forms..
Безоконные элементы управления
Технологии Microsoft Visual Basic® 6.0 и ActiveX поддерживают безоконные элементы управления. Безоконные элементы управления не поддерживаются в Windows Forms.
Пользовательский опыт проектирования
В случае необходимости реализации пользовательского опыта времени проектирования, можно создать собственный конструктор. Для составных элементов управления, наследуйте пользовательский класс конструктора из классов ParentControlDesigner или DocumentDesigner. Для расширенных и пользовательских элементов управления, наследуйте пользовательский класс конструктора из класса ControlDesigner.
Используйте DesignerAttribute для связывания элемента управления с конструктором. Дополнительные сведения см. в разделах Расширение поддержки времени разработки и Практическое руководство. Создание элемента управления Windows Forms, в котором используются преимущества функций, применяемых во время разработки.
См. также
Задачи
Руководство: Разработка простого элемента управления форм Windows Forms
Основные понятия
Разработка составного элемента Windows Forms
Другие ресурсы
Разработка пользовательских элементов управления Windows Forms в .NET Framework