- Введение в Windows Forms
- Создание графического приложения
- Запуск приложения
- Элементы управления
- Кнопка
- Оформление кнопки
- Изображение на кнопке
- Клавиши быстрого доступа
- Кнопки по умолчанию
- Типы пользовательских элементов управления (Windows Forms .NET) Types of custom controls (Windows Forms .NET)
- Базовый класс элемента управления Base Control Class
- Составные элементы управления Composite Controls
- Расширенные элементы управления Extended Controls
- Пользовательские элементы управления Custom Controls
- Элементы управления ActiveX ActiveX Controls
- Элементы управления без окон Windowless Controls
- Пользовательская среда разработки Custom Design Experience
Введение в Windows Forms
Для создания графических интерфейсов с помощью платформы .NET применяются разные технологии — Window Forms, WPF, приложения для магазина Windows Store (для ОС Windows 8/8.1/10). Однако наиболее простой и удобной платформой до сих пор остается Window Forms или формы. Данное руководство ставит своей целью дать понимание принципов создания графических интерфейсов с помощью технологии WinForms и работы основных элементов управления.
Создание графического приложения
Для создания графического проекта нам потребуется среда разработки Visual Studio. Поскольку наиболее распространенная пока версия Visual Studio 2013, то для данного руководства я буду использовать бесплатную версию данной среды Visual Studio Community 2013 которую можно найти на странице https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx.
После установки среды и всех ее компонентов, запустим Visual Studio и создадим проект графического приложения. Для этого в меню выберем пункт File (Файл) и в подменю выберем New — > Project (Создать — > Проект). После этого перед нами откроется диалоговое окно создания нового проекта:
В левой колонке выберем Windows Desktop , а в центральной части среди типов проектов — тип Windows Forms Application и дадим ему какое-нибудь имя в поле внизу. Например, назовем его HelloApp. После этого нажимаем OK.
После этого Visual Studio откроет наш проект с созданными по умолчанию файлами:
Большую часть пространства Visual Studio занимает графический дизайнер, который содержит форму будущего приложения. Пока она пуста и имеет только заголовок Form1. Справа находится окно файлов решения/проекта — Solution Explorer (Обозреватель решений). Там и находятся все связанные с нашим приложением файлы, в том числе файлы формы Form1.cs.
Внизу справа находится окно свойств — Properties. Так как у меня в данный момент выбрана форма как элемент управления, то в этом поле отображаются свойства, связанные с формой.
Теперь найдем в этом окне свойство формы Text и изменим его значение на любое другое:
Таким образом мы поменяли заголовок формы. Теперь перенесем на поле какой-нибудь элемент управления, например, кнопку. Для этого найдем в левой части Visual Studio вкладку Toolbox (Панель инструментов) . Нажмем на эту вкладку, и у нас откроется панель с элементами, откуда мы можем с помощью мыши перенести на форму любой элемент:
Найдем среди элементов кнопку и, захватив ее указателем мыши, перенесем на форму:
Это визуальная часть. Теперь приступим к самому программированию. Добавим простейший код на языке C#, который бы выводил сообщение по нажатию кнопки. Для этого мы должны перейти в файл кода, который связан с этой формой. Если у нас не открыт файл кода, мы можем нажать на форму правой кнопкой мыши и в появившемся меню выбрать View Code (Посмотреть файл кода):
Однако воспользуемся другим способом, чтобы не писать много лишнего кода. Наведем указатель мыши на кнопку и щелкнем по ней двойным щелчком. Мы автоматически попадаем в файл кода Form1.cs, который выглядит так:
Добавим вывод сообщения по нажатию кнопки, изменив код следующим образом:
Запуск приложения
Чтобы запустить приложение в режиме отладки, нажмем на клавишу F5 или на зеленую стрелочку на панели Visual Studio. После этого запустится наша форма с одинокой кнопкой. И если мы нажмем на кнопку на форме, то нам будет отображено сообщение с приветствием.
После запуска приложения студия компилирует его в файл с расширением exe. Найти данный файл можно, зайдя в папку проекта и далее в каталог bin/Debug или bin/Release
Рассмотрев вкратце создание проекта графического приложения, мы можем перейти к обзору основных компонентов и начнем мы с форм.
Элементы управления
Элементы управления представляют собой визуальные классы, которые получают введенные пользователем данные и могут инициировать различные события. Все элементы управления наследуются от класса Control и поэтому имеют ряд общих свойств:
Anchor : Определяет, как элемент будет растягиваться
BackColor : Определяет фоновый цвет элемента
BackgroundImage : Определяет фоновое изображение элемента
ContextMenu : Контекстное меню, которое открывается при нажатии на элемент правой кнопкой мыши. Задается с помощью элемента ContextMenu
Cursor : Представляет, как будет отображаться курсор мыши при наведении на элемент
Dock : Задает расположение элемента на форме
Enabled : Определяет, будет ли доступен элемент для использования. Если это свойство имеет значение False, то элемент блокируется.
Font : Устанавливает шрифт текста для элемента
ForeColor : Определяет цвет шрифта
Location : Определяет координаты верхнего левого угла элемента управления
Name : Имя элемента управления
Size : Определяет размер элемента
Width : ширина элемента
Height : высота элемента
TabIndex : Определяет порядок обхода элемента по нажатию на клавишу Tab
Tag : Позволяет сохранять значение, ассоциированное с этим элементом управления
Кнопка
Наиболее часто используемым элементом управления является кнопка. Обрабатывая событие нажатия кнопки, мы может производить те или иные действия.
При нажатии на кнопку на форме в редакторе Visual Studio мы по умолчанию попадаем в код обработчика события Click , который будет выполняться при нажатии:
Оформление кнопки
Чтобы управлять внешним отображением кнопки, можно использовать свойство FlatStyle. Оно может принимать следующие значения:
Flat — Кнопка имеет плоский вид
Popup — Кнопка приобретает объемный вид при наведении на нее указателя, в иных случаях она имеет плоский вид
Standard — Кнопка имеет объемный вид (используется по умолчанию)
System — Вид кнопки зависит от операционной системы
Изображение на кнопке
Как и для многих элементов управления, для кнопки можно задавать изображение с помощью свойства BackgroundImage. Однако мы можем также управлять размещением текста и изображения на кнопки. Для этого надо использовать свойство TextImageRelation . Оно приобретает следующие значения:
Overlay : текст накладывается на изображение
ImageAboveText : изображение располагается над текстом
TextAboveImage : текст располагается над изображением
ImageBeforeText : изображение располагается перед текстом
TextBeforeImage : текст располагается перед изображением
Например, установим для кнопки изображение. Для этого выберем кнопку и в окне Свойств нажмем на поле Image (не путать с BackgroundImage). Нам откроется диалоговое окно установи изображения:
В этом окне выберем опцию Local Resource и нажмем на кнопку Import , после чего нам откроется диалоговое окно для выбора файла изображения.
После выбора изображения мы можем установить свойство ImageAlign , которое управляет позиционированием изображения на кнопке:
Нам доступны 9 вариантов, с помощью которых мы можем прикрепить изображение к определенной стороне кнопки. Оставим здесь значение по умолчанию — MiddleCenter , то есть позиционирование по центру.
Затем перейдем к свойству TextImageRelation и установим для него значение ImageBeforeText . В итоге мы получим кнопку, где сразу после изображения идет надпись на кнопке:
Клавиши быстрого доступа
При работе с формами при использовании клавиатуры очень удобно пользоваться клавишами быстрого доступа. При нажатии на клавиатуре комбинации клавиш At+некоторый символ, будет вызываться определенная кнопка. Например, зададим для некоторой кнопки свойство Text равное &Аватар . Первый знак — амперсанд — определяет ту букву, которая будет подчеркнута. В данном случае надпись будет выглядеть как А ватар. И теперь чтобы вызвать событие Click, нам достаточно нажать на комбинацию клавиш Alt+А.
Кнопки по умолчанию
Форма, на которой размещаются все элементы управления, имеет свойства, позволяющие назначать кнопку по умолчанию и кнопку отмены.
Так, свойство формы AcceptButton позволяет назначать кнопку по умолчанию, которая будет срабатывать по нажатию на клавишу Enter.
Аналогично работает свойство формы CancelButton , которое назначает кнопку отмены. Назначив такую кнопку, мы можем вызвать ее нажатие, нажав на клавишу Esc.
Типы пользовательских элементов управления (Windows Forms .NET) Types of custom controls (Windows Forms .NET)
С помощью Windows Forms можно разрабатывать и реализовывать новые элементы управления. With Windows Forms, you can develop and implement new controls. Можно создать новый пользовательский элемент управления, изменить существующие элементы управления с помощью наследования, а также написать пользовательский элемент управления, который выполняет собственное рисование. You can create a new user control, modify existing controls through inheritance, and write a custom control that does its own painting.
Документация для Руководства по рабочему столу по .NET 5 (и .NET Core) находится в разработке. The Desktop Guide documentation for .NET 5 (and .NET Core) is under construction.
Выбор типа создаваемого элемента управления может быть затруднителен. Deciding which kind of control to create can be confusing. В этой статье описываются различия между типами элементов управления, которые можно использовать для наследования, и рассказывается, как выбрать тип элемента управления для конкретного проекта. This article highlights the differences among the various kinds of controls from which you can inherit, and provides you with information about how to choose a particular type of control for your project.
Если. If . | Создайте. Create a . |
---|---|
| Составной элемент управления путем наследования от System.Windows.Forms.UserControl. Composite control by inheriting from System.Windows.Forms.UserControl. |
| Расширенный элемент управления путем наследования от конкретного элемента управления Windows Forms. Extended control by inheriting from a specific Windows Forms control. |
| Пользовательский элемент управления путем наследования от System.Windows.Forms.Control. Custom control by inheriting from System.Windows.Forms.Control. |
Базовый класс элемента управления Base Control Class
Класс Control является базовым классом для элементов управления Windows Forms. The Control class is the base class for Windows Forms controls. Он обеспечивает инфраструктуру, необходимую для визуального отображения элементов управления в приложениях Windows Forms и предоставляет следующие возможности. It provides the infrastructure required for visual display in Windows Forms applications and provides the following capabilities:
- Обеспечивает обработку окон. Exposes a window handle.
- Управляет маршрутизацией сообщений. Manages message routing.
- Предоставляет события мыши и клавиатуры, а также многие другие события пользовательского интерфейса. Provides mouse and keyboard events, and many other user interface events.
- Предоставляет расширенные функции размещения. Provides advanced layout features.
- Содержит множество свойств, характерных для визуального отображения, таких как ForeColor, BackColor, Height и Width. Contains many properties specific to visual display, such as ForeColor, BackColor, Height, and Width.
- Обеспечивает безопасность и поддержку потоков, необходимые для того, чтобы элемент управления Windows Forms действовал как элемент управления Microsoft® ActiveX®. Provides the security and threading support necessary for a Windows Forms control to act as a Microsoft® ActiveX® control.
Поскольку существенная часть инфраструктуры предоставляется базовым классом, разрабатывать собственные элементы управления Windows Forms довольно просто. Because so much of the infrastructure is provided by the base class, it’s relatively easy to develop your own Windows Forms controls.
Составные элементы управления Composite Controls
Составной элемент управления — это коллекция элементов управления Windows Forms, инкапсулированных в общий контейнер. A composite control is a collection of Windows Forms controls encapsulated in a common container. Этот тип элементов управления иногда называют пользовательским элементом управления. This kind of control is sometimes called a user control. Элементы, входящие в составной элемент управления, называются составляющими. The contained controls are called constituent controls.
Составной элементе управления содержит все унаследованные функциональные возможности, связанные с каждым входящим в него элементом управления Windows Forms, и позволяет выборочно представлять и связывать их свойства. A composite control holds all of the inherent functionality associated with each of the contained Windows Forms controls and enables you to selectively expose and bind their properties. Кроме того, составной элемент управления предоставляет немало функций для обработки событий клавиатуры по умолчанию, не требуя дополнительной разработки с вашей стороны. A composite control also provides a great deal of default keyboard handling functionality with no extra development effort on your part.
Например, составной элемент управления можно собрать таким образом, чтобы он отображал данные адреса клиента из базы данных. For example, a composite control could be built to display customer address data from a database. Этот элемент управления включает элемент управления DataGridView для отображения полей базы данных, BindingSource для управления привязкой к источнику данных, а также BindingNavigator для перемещения по записям. This control would include a DataGridView control to display the database fields, a BindingSource to handle binding to a data source, and a BindingNavigator control to move through the records. Вы можете выборочно предоставить свойства привязки данных, а также упаковать и повторно использовать весь элемент управления в других приложениях. You could selectively expose data binding properties, and you could package and reuse the entire control from application to application.
Для создания составного элемента следует выполнить наследование от класса UserControl. To author a composite control, derive from the UserControl class. Базовый класс UserControl обеспечивает маршрутизацию клавиатуры для дочерних элементов управления и позволяет им работать сообща. The UserControl base class provides keyboard routing for child controls and enables child controls to work as a group.
Расширенные элементы управления Extended Controls
Элемент управления можно унаследовать от любого существующего элемента управления Windows Forms. You can derive an inherited control from any existing Windows Forms control. Такой подход позволяет сохранить все функциональные возможности, унаследованные от элемента управления Windows Forms, и расширить их путем добавления пользовательских свойств, методов или других функций. With this approach, you can keep all of the inherent functionality of a Windows Forms control, and then extend that functionality by adding custom properties, methods, or other features. С помощью этого параметра можно переопределить логику отрисовки базового элемента управления, а затем расширить его пользовательский интерфейс, изменив его внешний вид. With this option, you can override the base control’s paint logic, and then extend its user interface by changing its appearance.
Например, можно создать элемент управления, производный от элемента управления Button, который будет отслеживать, сколько раз пользователь на него нажал. For example, you can create a control derived from the Button control that tracks how many times a user has clicked it.
В некоторых элементах управления к графическому пользовательскому интерфейсу можно добавить пользовательское оформление путем переопределения метода OnPaint базового класса. In some controls, you can also add a custom appearance to the graphical user interface of your control by overriding the OnPaint method of the base class. Для расширенной кнопки, отслеживающей щелчки, можно переопределить метод OnPaint, чтобы вызвать базовую реализацию OnPaint, а затем отобразить число щелчков в одном углу клиентской области элемента управления Button. For an extended button that tracks clicks, you can override the OnPaint method to call the base implementation of OnPaint, and then draw the click count in one corner of the Button control’s client area.
Пользовательские элементы управления Custom Controls
Другим способом разработки элемента управления является создание его практически с нуля путем наследования от класса Control. Another way to create a control is to create one substantially from the beginning by inheriting from Control. Класс Control обеспечивает всю основную функциональность, необходимую элементам управления (включая обработку событий мыши и клавиатуры), однако не имеет функциональных возможностей для отдельных элементов управления и лишен графического интерфейса. The Control class provides all of the basic functionality required by controls, including mouse and keyboard handling events, but no control-specific functionality or graphical interface.
Создание элемента управления путем наследования от класса Control — гораздо более сложная задача, чем наследование от UserControl или существующего элемента управления Windows Forms. Creating a control by inheriting from the Control class requires much more thought and effort than inheriting from UserControl or an existing Windows Forms control. Поскольку значительную часть реализации вы выполняете сами, ваш элемент управления может быть более гибким, чем составной или расширенный, и вы можете его адаптировать к конкретным задачам. Because a great deal of implementation is left for you, your control can have greater flexibility than a composite or extended control, and you can tailor your control to suit your exact needs.
Для реализации настраиваемого элемента управления необходимо написать код для события OnPaint элемента управления, а также код для нужных вам функций. To implement a custom control, you must write code for the OnPaint event of the control, as well as any feature-specific code you need. Можно также переопределить метод WndProc и обрабатывать сообщения Windows напрямую. You can also override the WndProc method and handle windows messages directly. Это самый эффективный способ создания элементов управления, однако для того, чтобы использовать его эффективно, необходимо знание API Microsoft Win32®. This is the most powerful way to create a control, but to use this technique effectively, you need to be familiar with the Microsoft Win32® API.
Примером нестандартного элемента управления служит элемент управления «Часы», который выглядит и действует как часы со стрелками. An example of a custom control is a clock control that duplicates the appearance and behavior of an analog clock. Вы можете применить пользовательское оформление, чтобы заставить стрелки часов двигаться при наступлении событий Tick внутреннего компонента Timer. Custom painting is invoked to cause the hands of the clock to move in response to Tick events from an internal Timer component.
Элементы управления ActiveX ActiveX Controls
Несмотря на то что инфраструктура Windows Forms оптимизирована для размещения элементов управления Windows Forms, элементы управления ActiveX также можно использовать. Although the Windows Forms infrastructure has been optimized to host Windows Forms controls, you can still use ActiveX controls. Эта задача поддерживается в Visual Studio. There’s support for this task in Visual Studio.
Элементы управления без окон Windowless Controls
Технологии Microsoft Visual Basic® 6.0 и ActiveX поддерживают элементы управления без окон. The Microsoft Visual Basic® 6.0 and ActiveX technologies support windowless controls. В Windows Forms элементы управления без окон не поддерживаются. Windowless controls aren’t supported in Windows Forms.
Пользовательская среда разработки Custom Design Experience
Если вам требуется пользовательская среда разработки, вы можете создать свой собственный конструктор. If you need to implement a custom design-time experience, you can author your own designer. Для составных элементов управления следует наследовать класс пользовательского конструктора от классов ParentControlDesigner или DocumentDesigner. For composite controls, derive your custom designer class from the ParentControlDesigner or the DocumentDesigner classes. Для расширенных и настраиваемых элементов управления создайте класс пользовательского конструктора из класса ControlDesigner. For extended and custom controls, derive your custom designer class from the ControlDesigner class.
Используйте DesignerAttribute, чтобы связать элемент управления с конструктором. Use the DesignerAttribute to associate your control with your designer.
Следующие сведения устарели, но могут помочь вам. The following information is out of date but may help you.