Введение в 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. Design Пространство имен
Содержит классы, обеспечивающие поддержку задания параметров и поведения компонентов Windows Forms во время разработки. Contains classes that support design-time configuration and behavior for Windows Forms components. К числу этих классов относятся классы конструкторов, обеспечивающие поддержку компонентов Windows Forms, набор служб времени разработки, классы UITypeEditor , предназначенные для настройки некоторых типов свойств, и классы для импорта элементов управления ActiveX. These classes consist of designer classes that provide support for Windows Forms components, a set of design-time services; UITypeEditor classes for configuring certain types of properties, and classes for importing ActiveX controls.
Классы
Предоставляет пользовательский интерфейс для настройки свойства Anchor. Provides a user interface for configuring an Anchor property.
Импортирует элементы управления ActiveX и создает оболочку, доступную конструктору. Imports ActiveX controls and generates a wrapper that can be accessed by a designer.
Предоставляет набор параметров для AxImporter. Represents a set of options for an AxImporter.
Представляет параметр метода размещенного элемента управления ActiveX. Represents a parameter of a method of a hosted ActiveX control.
Создает оболочку для элементов управления ActiveX для использования в среде во время разработки. Generates a wrapper for ActiveX controls for use in the design-time environment.
Предоставляет редактор для задания свойства BorderSides. Provides an editor for setting the BorderSides property.
Базовый класс конструктора, расширяющий поведение корневого документа проектирования, поддерживающего вложенные компоненты, в режиме конструктора. Base designer class for extending the design mode behavior of a root design document that supports nested components.
Предоставляет пользовательский интерфейс для WindowsFormsComponentEditor. Provides a user interface for a WindowsFormsComponentEditor.
Предоставляет базовую реализацию для ComponentEditorPage. Provides a base implementation for a ComponentEditorPage.
Предоставляет настройки для области компонентов конструктора. Provides behavior for the component tray of a designer.
Расширяет поведение элемента управления Control в режиме разработки. Extends the design mode behavior of a Control.
Предоставляет доступ к получению и заданию значений параметров для конструктора. Provides access to get and set option values for a designer.
Предоставляет пользовательский интерфейс для задания свойства Dock. Provides a user interface for specifying a Dock property.
Базовый класс конструктора для расширения поведения в режиме разработки и обеспечения представления корневого уровня в режиме разработки для элемента управления Control, который поддерживает вложенные элементы управления и должен получать сообщения прокрутки. Base designer class for extending the design mode behavior of, and providing a root-level design mode view for, a Control that supports nested controls and should receive scroll messages.
Предоставляет систематический способ управления обработчиками событий для текущего документа. Provides a systematic way to manage event handlers for the current document.
Предоставляет вкладку PropertyTab, которая может отображать события для выделения и связывания. Provides a PropertyTab that can display events for selection and linking.
Предоставляет пользовательский интерфейс для выбора имени файла. Provides a user interface for selecting a file name.
Предоставляет пользовательский интерфейс для выбора папки из файловой системы. Provides a user interface for choosing a folder from the file system.
Предоставляет диалоговое окно, которое позволяет пользователю выбирать папку. Represents a dialog box that allows the user to choose a folder. Этот класс не наследуется. This class cannot be inherited.
Сериализирует словари строк. Serializes string dictionaries.
Предоставляет редактор, который может выполнить стандартный поиск файлов точечного рисунка (BMP-файлов). Provides an editor that can perform default file searching for bitmap (.bmp) files.
Определяет набор элементов для производных классов, чтобы предоставить параметры для редактора типов пользовательского интерфейса текстового поля с маской. Defines a set of members for derived classes to provide options for the masked text box UI type editor.
Определяет множество полей CommandID, каждое из которых соответствует командной функции, предоставленной средой узла. Defines a set of CommandID fields that each correspond to a command function provided by the host environment.
Расширяет поведение режима разработки Control, поддерживающего вложенные элементы управления. Extends the design mode behavior of a Control that supports nested controls.
Предоставляет базовый класс для вкладок со свойствами. Provides a base class for property tabs.
Базовый класс конструктора для расширения поведения элемента управления Control, который должен получать сообщения прокрутки, в режиме конструктора. Base designer class for extending the design mode behavior of a Control which should receive scroll messages.
Предоставляет редактор для выбора сочетаний клавиш. Provides an editor for picking shortcut keys.
Задает типы, в которых может отображаться элемент ToolStripItem. Specifies which types a ToolStripItem can appear in. Этот класс не наследуется. This class cannot be inherited.
Предоставляет базовый класс для редакторов, использующих модальный диалог для отображения страницы свойств, похожей на страницу свойств элементов управления ActiveX. Provides a base class for editors that use a modal dialog to display a properties page similar to an ActiveX control’s property page.
Предоставляет доступ для получения и задания значений параметров для конструктора Windows Forms. Provides access to get and set option values for a Windows Forms designer.
Структуры
Представляет окно и значение, указывающее, как полосы прокрутки окна должны быть оформлены тематически при отображении в конструкторе Visual Studio. Represents a window and a value that indicates how its scrollbars should be themed when displayed in the Visual Studio designer.
Интерфейсы
Предоставляет методы обработки ссылок к библиотекам ActiveX, библиотекам типов COM или сборкам, а также к управляемым сборкам. Provides methods to resolve references to ActiveX libraries, COM type libraries or assemblies, or managed assemblies.
Определяет метод для получения сведений о том, как полосы прокрутки окна должны быть оформлены стилистически при отображении в конструкторе Visual Studio. Defines a method for getting information about how the scrollbars of windows need to be themed when displayed in the Visual Studio designer.
Предоставляет доступ к службе редактирования меню. Provides access to the menu editing service.
Разрешает взаимодействие с пользовательским интерфейсом объекта среды разработки, в котором размещается конструктор. Enables interaction with the user interface of the development environment object that is hosting the designer.
Предоставляет интерфейс для UITypeEditor для отображения Windows Forms или элементов управления в раскрывающейся области элемента управления сетки свойств в режиме разработки. Provides an interface for a UITypeEditor to display Windows Forms or to display a control in a drop-down area from a property grid control in design mode.
Перечисления
Элементы действий конструктора, которые могут быть связаны с компонентом. Designer action items that can be associated with a component.
Определяет идентификатор, используемый для указания корневой папки для обозревателя папок, при выполнении первоначального просмотра. Defines identifiers used to indicate the root folder for a folder browser to initially browse to.
Определяет идентификаторы, используемые для задания поведения обозревателя FolderNameEditor.FolderBrowser. Defines identifiers used to specify behavior of a FolderNameEditor.FolderBrowser.
Определяет идентификаторы, используемые при указании правил выбора для компонента. Defines identifiers that are used to indicate selection rules for a component.
Значение, указывающее, будут ли полосы прокрутки окна и его дочерних элементов оформлены тематически при отображении в конструкторе Visual Studio. A value that indicates whether the scrollbars of a window and its children will be themed when displayed in the Visual Studio designer.
Задает элементы управления, отображаемые в конструкторе. Specifies controls that are visible in the designer.
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.