- Введение в Windows Forms
- Создание графического приложения
- Запуск приложения
- System. Windows. Forms. Integration Пространство имен
- Классы
- Делегаты
- Комментарии
- Привязка элементов управления Windows Forms к данным в Visual Studio Bind Windows Forms controls to data in Visual Studio
- Элементы управления BindingSource и BindingNavigator BindingSource and BindingNavigator controls
- Привязка к данным в элементе управления DataGridView Bind to data in a DataGridView control
- Привязка к данным в отдельных элементах управления Bind to data in individual controls
Введение в 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
Рассмотрев вкратце создание проекта графического приложения, мы можем перейти к обзору основных компонентов и начнем мы с форм.
System. Windows. Forms. Integration Пространство имен
Содержит классы, предназначенные для поддержки взаимодействия элементов управления Windows Forms и WPF. Contains classes that support interoperation of Windows Forms and WPF controls.
Классы
Предоставляет данные для событий ChildChanged и ChildChanged . Provides data for the ChildChanged and ChildChanged events.
Элемент управления Windows Forms, который может использоваться для размещения элемента Windows Presentation Foundation (WPF). A Windows Forms control that can be used to host a Windows Presentation Foundation (WPF) element.
Предоставляет базовый класс для классов EventArgs, поддерживающих необязательный выброс исключений. Provides a base class for EventArgs classes which support optionally raising exceptions.
Предоставляет данные для события LayoutError. Provides data for the LayoutError event.
Предоставляет способ преобразования значений свойств между элементами Windows Forms controls и Windows Presentation Foundation (WPF). Provides a way to translate property values between Windows Forms controls and Windows Presentation Foundation (WPF) elements.
Предоставляет данные для события PropertyMappingError. Provides data for the PropertyMappingError event.
Элемент, который позволяет размещать элемент управления Windows Forms на странице WPF. An element that allows you to host a Windows Forms control on a WPF page.
Делегаты
Предоставляет функцию преобразования для сопоставляемого свойства родительского элемента управления. Provides a translation function for a mapped property of the host control.
Комментарии
System.Windows.Forms.IntegrationПространство имен содержит классы, обеспечивающие взаимодействие между Windows Forms и технологиями WPF. The System.Windows.Forms.Integration namespace contains classes that enable interoperation between the Windows Forms and WPF technologies. При использовании System.Windows.Forms.Integration классов можно размещать элементы управления Windows Forms на страницах WPF, а элементы WPF — в приложениях на основе Windows Forms. When you use System.Windows.Forms.Integration classes, you can host Windows Forms controls on WPF pages, and WPF elements in Windows Forms-based applications.
Двумя ключевыми классами, реализующими возможности взаимодействия, являются WindowsFormsHost и ElementHost . The two key classes that implement interoperation capabilities are WindowsFormsHost and ElementHost. Используемый класс зависит от реализации элемента управления: Which class you use depends on your control implementation:
Используйте WindowsFormsHost класс, если необходимо использовать элемент управления Windows Forms на странице WPF. Use the WindowsFormsHost class when you must use a Windows Forms control on a WPF page.
Используйте ElementHost класс, если необходимо использовать элемент WPF в приложении на основе Windows Forms. Use the ElementHost class when you must use a WPF element in a Windows Forms-based application.
Привязка элементов управления Windows Forms к данным в Visual Studio Bind Windows Forms controls to data in Visual Studio
Вы можете отображать данные для пользователей приложения, привязывая данные к Windows Forms. You can display data to users of your application by binding data to Windows Forms. Чтобы создать эти элементы управления с привязкой к данным, перетащите элементы из окна Источники данных на конструктор Windows Forms в Visual Studio. To create these data-bound controls, drag items from the Data Sources window onto the Windows Forms Designer in Visual Studio.
Если окно Источники данных не отображается, его можно открыть, выбрав Просмотреть > другие > Источники данных Windows или нажав клавиши SHIFT + ALT + D. If the Data Sources window is not visible, you can open it by choosing View > Other Windows > Data Sources, or by pressing Shift+Alt+D. Для просмотра окна Источники данных в Visual Studio должен быть открыт проект. You must have a project open in Visual Studio to see the Data Sources window.
Перед перетаскиванием элементов можно задать тип элемента управления, к которому необходимо выполнить привязку. Before you drag items, you can set the type of control you want to bind to. Различные значения отображаются в зависимости от выбора самой таблицы или отдельного столбца. Different values appear depending on whether you choose the table itself, or an individual column. Можно также задать пользовательские значения. You can also set custom values. Для таблицы сведения означает, что каждый столбец привязан к отдельному элементу управления. For a table, Details means that each column is bound to a separate control.
Элементы управления BindingSource и BindingNavigator BindingSource and BindingNavigator controls
Компонент BindingSource служит двум целям. The BindingSource component serves two purposes. Во-первых, он предоставляет уровень абстракции при привязке элементов управления к данным. First, it provides a layer of abstraction when binding the controls to data. Элементы управления в форме привязываются к BindingSource компоненту, а не непосредственно к источнику данных. Controls on the form are bound to the BindingSource component instead of directly to a data source. Во-вторых, он может управлять коллекцией объектов. Second, it can manage a collection of objects. Добавление типа в BindingSource создает список этого типа. Adding a type to the BindingSource creates a list of that type.
Дополнительные сведения о BindingSource компоненте см. в следующих статьях: For more information about the BindingSource component, see:
Элемент управления BindingNavigator предоставляет пользовательский интерфейс для навигации по данным, отображаемым приложением Windows. The BindingNavigator control provides a user interface for navigating through data displayed by a Windows application.
Привязка к данным в элементе управления DataGridView Bind to data in a DataGridView control
Для элемента управления DataGridViewвся таблица привязана к этому отдельному элементу управления. For a DataGridView control, the entire table is bound to that single control. При перетаскивании элемента DataGridView в форму также появляется панель инструментов для навигации по записям ( BindingNavigator ). When you drag a DataGridView to the form, a tool strip for navigating records (BindingNavigator) also appears. Набор данных, TableAdapter, BindingSource и BindingNavigator отображается в области компонентов. A DataSet, TableAdapter, BindingSource, and BindingNavigator appear in the component tray. На следующем рисунке также добавлен TableAdapterManager , так как таблица Customers имеет связь с таблицей Orders. In the following illustration, a TableAdapterManager is also added because the Customers table has a relation to the Orders table. Все эти переменные объявляются в автоматически созданном коде как закрытые члены класса Form. These variables are all declared in the auto-generated code as private members in the form class. Автоматически созданный код для заполнения DataGridView находится в Form_Load обработчике событий. The auto-generated code for filling the DataGridView is located in the Form_Load event handler. Код для сохранения данных для обновления базы данных находится в Save обработчике событий для BindingNavigator. The code for saving the data to update the database is located in the Save event handler for the BindingNavigator. Этот код можно перемещать или изменять при необходимости. You can move or modify this code as needed.
Поведение DataGridView и BindingNavigator можно настроить, щелкнув смарт-тег в правом верхнем углу каждого из них: You can customize the behavior of the DataGridView and the BindingNavigator by clicking on the smart tag in the upper-right corner of each:
Если элементы управления, необходимые приложению, недоступны в окне Источники данных , можно добавить элементы управления. If the controls your application needs are not available from within the Data Sources window, you can add controls. Дополнительные сведения см. в разделе Добавление пользовательских элементов управления в окно Источники данных. For more information, see Add custom controls to the Data Sources window.
Кроме того, можно перетаскивать элементы из окна Источники данных на элементы управления, которые уже находятся в форме, чтобы привязать элемент управления к данным. You can also drag items from the Data Sources window onto controls already on a form to bind the control to data. Элементы управления, которые уже привязаны к данным, применяют привязку данных к элементу, который был перемещен в последнее время. A control that is already bound to data has its data bindings reset to the item most recently dragged onto it. Чтобы быть допустимым целевым объектом перетаскивания, элементы управления должны иметь возможность отображения базового типа данных элемента, перетаскиваемого в него, из окна Источники данных . To be valid drop targets, controls must be capable of displaying the underlying data type of the item dragged onto it from the Data Sources window. Например, нельзя перетащить элемент, имеющий тип данных DateTime CheckBox , на, поскольку не CheckBox может отобразить дату. For example, it’s not valid to drag an item that has a data type of DateTime onto a CheckBox, because the CheckBox is not capable of displaying a date.
Привязка к данным в отдельных элементах управления Bind to data in individual controls
При привязке источника данных к подробностям каждый столбец в наборе данных привязывается к отдельному элементу управления. When you bind a data source to Details, each column in the dataset is bound to a separate control.
Обратите внимание, что на предыдущем рисунке вы перетащили из свойства Orders таблицы Customers, а не из таблицы Orders. Note that in the previous illustration, you drag from the Orders property of the Customers table, not from the Orders table. При привязке к Customer.Orders свойству команды навигации, выполненные в DataGridView , немедленно отражаются в элементах управления «подробности». By binding to the Customer.Orders property, navigation commands made in the DataGridView are reflected immediately in the details controls. При перетаскивании из таблицы Orders элементы управления все равно будут привязаны к набору данных, но не будут синхронизированы с DataGridView. If you dragged from the Orders table, the controls would still be bound to the dataset, but not they would not be synchronized with the DataGridView.
На следующем рисунке показаны элементы управления, привязанные к данным по умолчанию, которые добавляются в форму после привязки свойства Orders в таблице Customers к сведениям в окне Источники данных . The following illustration shows the default data-bound controls that are added to the form after the Orders property in the Customers table is bound to Details in the Data Sources window.
Обратите внимание, что каждый элемент управления имеет смарт-тег. Note also that each control has a smart tag. Этот тег включает настройки, применяемые только к этому элементу управления. This tag enables customizations that apply to that control only.