Создание собственных элементов управления

Платформа .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 напрямую. Это самый эффективный способ создания элементов управления, однако для того, чтобы использовать его эффективно, необходимо знание API Microsoft Win32®.

Примером нестандартного элемента управления служит элемент управления "Часы", который выглядит и действует как часы со стрелками. Вы можете применить пользовательское оформление, чтобы заставить стрелки часов двигаться при наступлении событий 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, в котором используются преимущества функций, применяемых во время разработки.

См. также