Работа с формами
Основы форм
Внешний вид приложения является нам преимущественно через формы. Формы являются основными строительными блоками. Они предоставляют контейнер для различных элементов управления. А механизм событий позволяет элементам формы отзываться на ввод пользователя, и, таким образом, взаимодействовать с пользователем.
При открытии проекта в Visual Studio в графическом редакторе мы можем увидеть визуальную часть формы — ту часть, которую мы видим после запуска приложения и куда мы переносим элементы с панели управления. Но на самом деле форма скрывает мощный функционал, состоящий из методов, свойств, событий и прочее. Рассмотрим основные свойства форм.
Если мы запустим приложение, то нам отобразится одна пустая форма. Однако даже такой простой проект с пустой формой имеет несколько компонентов:
Несмотря на то, что мы видим только форму, но стартовой точкой входа в графическое приложение является класс Program, расположенный в файле Program.cs:
Сначала программой запускается данный класс, затем с помощью выражения Application.Run(new Form1()) он запускает форму Form1. Если вдруг мы захотим изменить стартовую форму в приложении на какую-нибудь другую, то нам надо изменить в этом выражении Form1 на соответствующий класс формы.
Сама форма сложна по содержанию. Она делится на ряд компонентов. Так, в структуре проекта есть файл Form1.Designer.cs, который выглядит примерно так:
Здесь объявляется частичный класс формы Form1, которая имеет два метода: Dispose() , который выполняет роль деструктора объекта, и InitializeComponent() , который устанавливает начальные значения свойств формы.
При добавлении элементов управления, например, кнопок, их описание также добавляется в этот файл.
Но на практике мы редко будем сталкиваться с этим классом, так как они выполняет в основном дизайнерские функции — установка свойств объектов, установка переменных.
Еще один файл — Form1.resx — хранит ресурсы формы. Как правило, ресурсы используются для создания однообразных форм сразу для нескольких языковых культур.
И более важный файл — Form1.cs, который в структуре проекта называется просто Form1, содержит код или программную логику формы:
Введение в 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.