Пользовательские элементы управления (Windows Forms .NET)

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

Внимание

Документация по рабочему столу для .NET 7 и .NET 6 находится в стадии разработки.

Базовый класс управления

Класс Control является базовым классом для элементов управления Windows Forms. Он обеспечивает инфраструктуру, необходимую для визуального отображения элементов управления в приложениях Windows Forms и предоставляет следующие возможности.

  • Обеспечивает обработку окон.
  • Управляет маршрутизацией сообщений.
  • Предоставляет события мыши и клавиатуры, а также многие другие события пользовательского интерфейса.
  • Предоставляет расширенные функции размещения.
  • Содержит множество свойств, характерных для визуального отображения, таких как ForeColor, BackColor, Height и Width.

Поскольку существенная часть инфраструктуры предоставляется базовым классом, разрабатывать собственные элементы управления Windows Forms довольно просто.

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

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

Если... Создайте...
  • — если нужно объединить функциональные возможности нескольких элементов управления Windows Forms в один блок для повторного использования.
Разработка пользовательского элемента управления путем наследования от System.Windows.Forms.UserControl.
  • — если большинство необходимых функций аналогичны функциям уже существующего элемента управления Windows Forms;
  • — если нестандартный графический интерфейс не требуется или необходимо разработать новый интерфейс для существующего элемента управления.
Расширьте элемент управления , наследуя от определенного элемента управления Windows Forms.
  • — если требуется создать пользовательское графическое представление элемента управления;
  • — если требуется реализовать пользовательские функциональные возможности, которые недоступны в стандартных элементах управления.
Создайте пользовательский элемент управления, наследуя от System.Windows.Forms.Control.

Пользовательские элементы управления

Пользовательский элемент управления — это коллекция элементов управления Windows Forms, представленных как единый элемент управления потребителю. Этот вид элемента управления называется составным элементом управления. Элементы, входящие в составной элемент управления, называются составляющими.

Пользовательский элемент управления содержит все встроенные функции, связанные с каждым из содержащихся элементов управления Windows Forms, и позволяет выборочно предоставлять и привязывать их свойства. Кроме того, пользовательский элемент управления предоставляет большую часть функций обработки клавиатуры по умолчанию без дополнительных усилий по разработке.

Например, пользовательский элемент управления можно создать для отображения данных адреса клиента из базы данных. Этот элемент управления включает элемент управления DataGridView для отображения полей базы данных, BindingSource для управления привязкой к источнику данных, а также BindingNavigator для перемещения по записям. Вы можете выборочно предоставлять свойства привязки данных, а также упаковать и повторно использовать весь элемент управления из приложения в приложение.

Дополнительные сведения см. в обзоре пользовательского элемента управления.

Расширенные элементы управления

Элемент управления можно унаследовать от любого существующего элемента управления Windows Forms. Такой подход позволяет сохранить все функциональные возможности, унаследованные от элемента управления Windows Forms, и расширить их путем добавления пользовательских свойств, методов или других функций. С помощью этого параметра можно переопределить логику отрисовки базового элемента управления, а затем расширить его пользовательский интерфейс, изменив его внешний вид.

Например, можно создать элемент управления, производный от элемента управления Button, который будет отслеживать, сколько раз пользователь на него нажал.

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

Пользовательские элементы управления

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

Для создания элемента управления, наследуемого от Control класса, требуется больше мысли и усилий, чем наследование от UserControl существующего элемента управления Windows Forms. Поскольку значительную часть реализации вы выполняете сами, ваш элемент управления может быть более гибким, чем составной или расширенный, и вы можете его адаптировать к конкретным задачам.

Чтобы реализовать пользовательский элемент управления, необходимо написать код для OnPaint события элемента управления, который управляет визуальным изображением элемента управления. Для элемента управления также необходимо написать любое поведение, зависят от конкретных функций. Можно также переопределить метод WndProc и обрабатывать сообщения Windows напрямую. Это самый эффективный способ создания элементов управления, однако для того, чтобы использовать его эффективно, необходимо знание API Microsoft Win32®.

Примером нестандартного элемента управления служит элемент управления "Часы", который выглядит и действует как часы со стрелками. Вы можете применить пользовательское оформление, чтобы заставить стрелки часов двигаться при наступлении событий Tick внутреннего компонента Timer.

Пользовательский интерфейс проектирования

Если вам требуется пользовательская среда разработки, вы можете создать свой собственный конструктор. Для составных элементов управления следует наследовать класс пользовательского конструктора от классов ParentControlDesigner или DocumentDesigner. Для расширенных и настраиваемых элементов управления создайте класс пользовательского конструктора из класса ControlDesigner.

Используйте DesignerAttribute, чтобы связать элемент управления с конструктором.

Следующие сведения устарели, но могут помочь вам.