Как в windows forms сделать красивый дизайн
Создание приложения Windows Forms на C# в Visual Studio Create a Windows Forms app in Visual Studio with C#
В рамках этого краткого знакомства с возможностями интегрированной среды разработки Visual Studio (IDE) вы создадите простое приложение на C# с пользовательским интерфейсом на основе Windows. In this short introduction to the Visual Studio integrated development environment (IDE), you’ll create a simple C# application that has a Windows-based user interface (UI).
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого. If you haven’t already installed Visual Studio, go to the Visual Studio downloads page to install it for free.
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого. If you haven’t already installed Visual Studio, go to the Visual Studio downloads page to install it for free.
На некоторых снимках экрана в этом учебнике используется темная тема. Some of the screenshots in this tutorial use the dark theme. Если вы не используете темную тему, но хотите переключиться на нее, см. страницу Персонализация интегрированной среды разработки и редактора Visual Studio. If you aren’t using the dark theme but would like to, see the Personalize the Visual Studio IDE and Editor page to learn how.
Создание проекта Create a project
Сначала вы создадите проект приложения на C#. First, you’ll create a C# application project. Для этого типа проекта уже имеются все нужные файлы шаблонов, что избавляет вас от лишней работы. The project type comes with all the template files you’ll need, before you’ve even added anything.
Откройте Visual Studio 2017. Open Visual Studio 2017.
В верхней строке меню последовательно выберите Файл > Создать > Проект. From the top menu bar, choose File > New > Project.
Запустите Visual Studio 2019. Open Visual Studio 2019.
На начальном экране выберите Создать проект. On the start window, choose Create a new project.
В окне Создать проект выберите шаблон Приложение Windows Forms (.NET Framework) для C#. On the Create a new project window, choose the Windows Forms App (.NET Framework) template for C#.
(При желании вы можете уточнить условия поиска, чтобы быстро перейти к нужному шаблону. (If you prefer, you can refine your search to quickly get to the template you want. Например, введите Приложение Windows Forms в поле поиска. For example, enter or type Windows Forms App in the search box. Затем выберите C# в списке языков и Windows в списке платформ.) Next, choose C# from the Language list, and then choose Windows from the Platform list.)
Если шаблон Приложение Windows Forms (.NET Framework) отсутствует, его можно установить из окна Создание проекта. If you do not see the Windows Forms App (.NET Framework) template, you can install it from the Create a new project window. В сообщении Не нашли то, что искали? выберите ссылку Установка других средств и компонентов. In the Not finding what you’re looking for? message, choose the Install more tools and features link.
Затем нажмите кнопку Изменить в Visual Studio Installer. After that, choose the Modify button in the Visual Studio Installer. Вам может быть предложено сохранить результаты работы; в таком случае сделайте это. You might be prompted to save your work; if so, do so. Выберите Продолжить, чтобы установить рабочую нагрузку. Next, choose Continue to install the workload. После этого вернитесь к шагу 2 в процедуре Создание проекта. Then, return to step 2 in this «Create a project» procedure.
В поле Имя проекта окна Настроить новый проект введите HelloWorld. In the Configure your new project window, type or enter HelloWorld in the Project name box. Затем нажмите Создать. Then, choose Create.
Новый проект открывается в Visual Studio. Visual Studio opens your new project.
Создание приложения Create the application
Когда вы выберете шаблон проекта C# и зададите имя файла, Visual Studio открывает форму. After you select your C# project template and name your file, Visual Studio opens a form for you. Форма является пользовательским интерфейсом Windows. A form is a Windows user interface. Мы создадим приложение Hello World, добавив элементы управления на форму, а затем запустим его. We’ll create a «Hello World» application by adding controls to the form, and then we’ll run the app.
Добавление кнопки на форму Add a button to the form
Щелкните Панель элементов, чтобы открыть всплывающее окно «Панель элементов». Choose Toolbox to open the Toolbox fly-out window.
(Если параметр для всплывающего окна Панель элементов отсутствует, его можно открыть в строке меню. (If you don’t see the Toolbox fly-out option, you can open it from the menu bar. Для этого выберите Вид > Панель элементов. To do so, View > Toolbox. Либо нажмите клавиши CTRL+ALT+X.) Or, press Ctrl+Alt+X.)
Щелкните значок Закрепить, чтобы закрепить окно Панель элементов. Choose the Pin icon to dock the Toolbox window.
Выберите элемент управления Кнопка и перетащите его на форму. Choose the Button control and then drag it onto the form.
(Если окно Свойства не отображается, его можно открыть в строке меню.) (If you don’t see the Properties window, you can open it from the menu bar. Для этого выберите Вид > Окно свойств. To do so, choose View > Properties Window. Или нажмите клавишу F4.) Or, press F4.)
Добавление метки на форму Add a label to the form
Теперь, когда мы добавили элемент управления »Кнопка» для создания действия, давайте добавим элемент управления «Метка», куда можно отправлять текст. Now that we’ve added a button control to create an action, let’s add a label control to send text to.
Выберите элемент управления Метка в окне Панель элементов, а затем перетащите его на форму и расположите под кнопкой Нажмите это. Select the Label control from the Toolbox window, and then drag it onto the form and drop it beneath the Click this button.
Добавление кода на форму Add code to the form
В окне Form1.cs [Проект] дважды щелкните кнопку Нажмите это, чтобы открыть окно Form1.cs. In the Form1.cs [Design] window, double-click the Click this button to open the Form1.cs window.
(Кроме того, можно развернуть узел Form1.cs в обозревателе решений, а затем выбрать Form1.) (Alternatively, you can expand Form1.cs in Solution Explorer, and then choose Form1.)
Запуск приложения Run the application
Нажмите кнопку Запустить, чтобы запустить приложение. Choose the Start button to run the application.
Будет выполнено несколько операций. Several things will happen. В интегрированной среде разработки Visual Studio откроются окна Средства диагностики и Вывод. In the Visual Studio IDE, the Diagnostics Tools window will open, and an Output window will open, too. Кроме того, вне этой среды откроется диалоговое окно Form1. But outside of the IDE, a Form1 dialog box appears. Оно будет содержать вашу кнопку Нажмите это и текст Label1. It will include your Click this button and text that says Label1.
Закройте диалоговое окно Form1, чтобы завершить работу приложения. Close the Form1 dialog box to stop running the app.
Следующие шаги Next steps
Для получения дополнительных сведений перейдите к следующему руководству: To learn more, continue with the following tutorial:
System. Windows. Forms. Design Пространство имен
Классы
Предоставляет пользовательский интерфейс для настройки свойства 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.
Как в windows forms сделать красивый дизайн
Визуальное проектирование приложений C#
А.В. Фролов, Г.В. Фролов
Глава 3. Формы в приложениях C #
В этой главе мы рассмотрим формы подробнее и научимся задавать для них различные свойства.
Теперь мы научим Вас настраивать внешний вид формы, чтобы придать ей необходимый дизайн. Как и следовало ожидать, большинство операций по настройке внешнего вида формы выполняется визуально без «ручного» программирования.
Первое, что мы сделаем, это изменим заголовок формы.
Рис. 3-1. Просмотр свойств формы Form 1
Рис. 3-2. Мы изменили заголовок окна
Чтобы нарисовать новый значок, нужно обладать определенными художественными способностями. Вы можете поручить эту работу профессиональному дизайнеру или воспользоваться готовыми значками.
Рис. 3-3. Изменение значка формы
Выберите только что скопированный файл значка SECUR 04. ICO в стандартном окне выбора файлов. После этого новый значок появится в верхнем левом углу создаваемой формы.
Далее нужно включить новый файл значка в проект нашего приложения.
Рис. 3-4. Файл значка добавлен в проект
Заметим, что файл значка *. ico может содержать не одно, а сразу несколько изображений, каждое из которых имеет свой размер и свою палитру (т.е. набор цветов). В использованном нами файле SECUR 04. ICO имеются два изображения, одно из которых (большое) имеет размер 32х32 пиксела, а другое (маленькое) — размер 16х16 пикселов. Максимальное количество цветов обоих изображений равно 16.
Рис. 3-5. Добавление изображения нового типа
Проделав все описанные выше действия по изменению значка формы, оттранслируйте и запустите приложение на выполнение кнопкой F 5. Теперь окно формы примет вид, показанный на рис. 3-6.
Рис. 3-6. Новый значок формы
По умолчанию окно формы снабжается рамкой, с помощью которой пользователь может изменять размеры окна. Однако такая рамка не всегда удобна. Обычно диалоговые окна, вроде тех, что предназначены для идентификации пользователей, имеют фиксированный размер. Настраивая соответствующим образом свойства формы, можно выбрать необходимый в каждом конкретном случае тип рамки.
Рис. 3-7. Выбор рамки для нашей формы
Рис. 3-8. Рамка типа Fixed3D
Хотя мы запретили изменение размеров окна при помощи рамки, пользователь все же может раскрыть окно на весь экран (максимизировать окно) или свернуть его в панель задач (минимизировать) при помощи управляющих кнопок, расположенных в правой части заголовка формы.
Если по логике работы приложения такие действия недопустимы, следует блокировать некоторые или все упомянутые выше кнопки, настраивая соответствующим образом свойства формы.
Рис. 3-9. Размеры этого окна изменить нельзя
Рис. 3-10. Появилась кнопка запроса подсказки
Если щелкнуть кнопку подсказки, курсор мыши будет снабжен вопросительным знаком. Пользователь сможет подвести такой курсор к интересующему его объекту формы и, щелкнув этот элемент, узнать его назначение.
По умолчанию формы, создаваемые мастером проектов, имеют скучный серый цвет, как и все стандартные диалоговые окна ОС Microsoft Windows первых версий. К счастью, Вы можете легко задать необходимый фоновый цвет формы и даже указать для формы фоновое изображение, редактируя ее свойства.
Рис. 3-11. Диалоговое окно выбора цвета
Вкладка Web содержит более обширный список цветов, которые гарантированно отображаются браузерами при низком цветовом разрешении видеоадаптера (в режиме отображения 256 цветов).
И, наконец, с помощью вкладки Custom можно задать любой цвет, выбрав его из палитры или указав значения отдельных составляющих компонентов цвета.
Этот дизайнерский прием позволяет, с одной стороны, улучшить внешний вид страницы, а с другой — обеспечить небольшое время загрузки страницы по медленным каналам Интернета. Последнее достигается благодаря небольшому размеру файла фонового изображения.
Теперь окно нашей формы примет вид, показанный на рис. 3-12.
Рис. 3-12. Фоновое изображение в окне формы
В левой части этого окна появилась широкая полоса, образовавшаяся в результате тиражирования фонового изображения по вертикали.
В качестве фона автономного приложения можно применить практически любое графическое изображение, однако учтите, что на загрузку изображения размером в несколько мегабайт может уйти немало времени (особенно если производительность компьютера не слишком высока). Поэтому мы рекомендуем не перегружать форму фоновыми изображениями большого размера без особой на то необходимости.
Рис. 3-13. Выбор формы курсора мыши
Рис. 3-14. Курсор в виде руки
Мы, однако, не рекомендуем сильно увлекаться использованием курсоров мыши нестандартной формы, т.к. это может запутать пользователя.
Как мы уже говорили в предыдущей главе, в форму можно добавлять различные элементы управления, формирующие пользовательский интерфейс, а также программные компоненты. Эта операция выполняется простым перетаскиванием мышью значков необходимых элементов или компонентов в форму из инструментальных панелей.
При добавлении компонентов мы будем пользоваться инструментальной панелью, показанной на рис. 3-15.
Рис. 3-15. Значки элементов управления на инструментальной панели Toolbox
В итоге всех действий, описанных в этой главе книги, форма приложения UserLogin должна принять вид, показанный на рис. 3-16.
Рис. 3-16. Готовая форма идентификации пользователей
Что нового появилось в этой форме?
Прежде всего, мы добавили логотип и текстовые надписи. Кроме этого, в форме появились два поля ввода текстовой информации, первое из которых (обычное) предназначено для ввода идентификатора пользователя, а второе (специальное) — для ввода пароля. Свойства этого поля настроены таким образом, что введенные символы пароля не отображаются, а заменяются звездочками.
Назначение кнопок Войти и Отменить очевидно. Первая из них позволяет войти в систему администрирования, а вторая просто закрывает форму без выполнения каких-либо дополнительных действий.
В инструментальной панели Toolbox предусмотрено два типа полей для создания текстовых надписей в формах. Это поля Label и LinkLabel (рис. 3-15).
Рис. 3-17. Выбор шрифта для отображения текстовых надписей
Создавая приложения, которые предназначены для работы на различных компьютерах, не увлекайтесь особенно выбором нестандартных шрифтов. Если указанного шрифта не найдется на компьютере пользователя, то вместо него ОС подберет другой, наиболее подходящий с ее точки зрения, шрифт. И вовсе не обязательно, что внешний вид Вашей формы от этого улучшится.
Более подробно мы расскажем о шрифтах в 10 главе нашей книги.
Еще одно важное свойство TextAlign текстовых полей задает способ выравнивания текста в прямоугольной области, отведенной для поля. Если попытаться его отредактировать, на экране появится окно выбора способа выравнивания, показанное на рис. 3-18.
Рис. 3-18. Выбор выравнивания текста
Чтобы задать нужный способ выравнивания, щелкните одну из расположенных в этом окне кнопок. По умолчанию текст выравнивается по левой верхней границе, поэтому соответствующая кнопка изображена в нажатом состоянии.
Нажимая те или иные кнопки, нетрудно выровнять текст по вертикали и по горизонтали. При этом в окне дизайнера форм Вы сразу увидите результат своей работы.
Как мы уже говорили, поля LinkLabel предназначены для добавления в форму ссылок на ресурсы Интернета или на другие формы. В этом разделе мы расскажем о настройке основных свойств этого поля на этапе проектирования формы.
Свойство LinkColor определяет цвет ссылки, которая еще ни разу не использовалась. По умолчанию такие ссылки имеют светло-синий цвет.
Ранее мы уже рассказывали о том, что для формы можно задавать фоновое изображение. Помимо этого имеется возможность размещать любые графические изображения на поверхности формы.
Рис. 3-19. Выбор файла графического изображения
Сразу после этого выбранное изображение появится в форме. Теперь останется только отрегулировать расположение изображения и размеры выделенной для него области. Учтите, что Вы не сможете выполнить масштабирование изображения, поэтому данная операция должна выполняться еще при подготовке файла изображения.
Самый простой способ позиционирования элементов управления, добавленных в форму из окна инструментальной панели, заключается в их перемещении мышью. Тонкая доводка расположения элементов «по месту» может выполняться и клавишами перемещения курсора.
Для удобства позиционирования элементов в режиме проектирования формы используется специальная точечная сетка (рис. 3-20).
Рис. 3-20. Сетка для точного позиционирования элементов управления
Настраивая свойства формы и самих элементов управления, можно установить такой режим проектирования, при котором элементы привязываются узлам сетки и не могут занимать промежуточные положения. Режим привязки облегчает выравнивание границ элементов и самих элементов по вертикали и горизонтали.
Рис. 3-21. Свойства формы для этапа проектирования
Рис. 3-22. Панель инструментов выравнивания элементов управления
Рис. 3-23. Меню Align
Заметим, что вместо меню можно использовать панель инструментов, показанную на рис. 3-22. Строке Lefts в этой панели соответствует вторая кнопка слева. Самая левая кнопка панели инструментов выравнивания обеспечивает привязку выбранного элемента к сетке.
Средствами меню Align можно выровнять выделенные элементы по вертикали и горизонтали. Их можно выровнять левой (строка Lefts ), правой ( Rights ), верхней ( Tops ) и нижней ( Bottoms ) границам. Можно выполнить центровку элементов по вертикали ( Centers ) и горизонтали ( Middles ), а также привязать границы элементов к сетке ( to Grid ).
Строки меню Make the Same Size позволяют сделать одинаковыми размеры выделенных элементов управления по вертикали и горизонтали (рис. 3-24).
С помощью строк Width и Height можно сделать одинаковыми размеры выделенных элементов управления, соответственно, по ширине и высоте. Строка Both позволяет уравнять одновременно и ширину, и высоту элементов.
Меню Horizontal spacing (рис. 3-25) и Vertical spacing (рис. 3-26) позволяют уровнять расстояние между элементами по горизонтали и вертикали, соответственно. В этой операции задействуют, как правило, не менее трех элементов.
Рис. 3-26. Меню Vertical spacing
С помощью строк Make Equal этих меню можно автоматически расположить элементы таким образом, чтобы между ними было равное расстояние.
Строки Increase и Decrease позволяют, соответственно, увеличить и уменьшить расстояние между элементами.
И, наконец, строка Remove позволяет ликвидировать свободное пространство между элементами, расположив их вплотную.
Меню Center in Form (рис. 3-27) предназначено для центровки элементов внутри окна формы.
Рис. 3-27. Меню Center in Form
С помощью строки Horizontally можно выполнить центровку по горизонтали, а с помощью строки Vertically — по вертикали.
Заметим, что элементы в форме могут пересекаться, перекрывая друг друга. С помощью меню Order (рис. 3-28) разработчик может изменить порядок расположения элементов, выдвигая некоторые элементы на передний план (строка Bring to Front ) или убирая некоторые элементы на задний план (строка Send to Back ).
Рис. 3-28. Меню Order
Как известно, с приложениями Microsoft Windows можно работать и без мыши, с использованием одной только клавиатуры. Нельзя сказать, чтобы этот способ был удобный или широко распространенный, но, строго говоря, если Вы создаете программу с графическим интерфейсом для этой ОС, то она должна быть пригодна к употреблению даже на компьютерах, не оборудованных мышью, трекболом или аналогичным устройством.
Стандартные диалоговые окна Microsoft Windows позволяют обходиться без мыши. Для того чтобы изменить состояние того или иного элемента управления, расположенного в таком окне, пользователь вначале должен передать этому элементу фокус ввода. Эта операция выполняется при помощи клавиши табуляции. Когда пользователь нажимает клавишу табуляции, фокус ввода последовательно передается от одного элемента управления к другому. Перебирая элементы управления, пользователь находит нужный и затем изменяет его состояние необходимым образом с помощью клавиатуры или мыши.
Только что описанное свойство TabStop управляет возможностью получения фокуса элементами управления, расположенными в форме, а свойство TabIndex определяет порядок, в котором эти элементы управления получают фокус ввода при использовании клавиши табуляции.
Для каждого элемента управления формы свойство TabIndex имеет свое собственной числовое значение. Во время проектирования дизайнер формы назначает эти значения автоматически в соответствии с порядком, в котором эти элементы были добавлены в форму.
Вы можете управлять порядком передачи фокуса ввода при использовании клавиши табуляции, изменяя соответствующим образом значения свойства TabIndex элементов управления, расположенных в форме. Но при этом необходимо следить, чтобы все элементы управления имели разные значения этого свойства, иначе логика передачи фокуса ввода будет нарушена.
Однако пока наша форма никак не реагирует на использование элементов управления, т.к. мы еще не добавили обработчики событий. Как мы уже говорили, чтобы добавить обработчик события для того или иного элемента управления, нужно щелкнуть его дважды левой клавишей мыши.
private void button1_Click(object sender, System.EventArgs e)
<
MessageBox.Show(«User: » + textBox1.Text + «\n» +
«Password: » + textBox2.Text);
>
Обратите внимание, что мы передаем методу MessageBox.Show текстовую строку, составленную из свойств textBox1.Text и textBox2.Text элементов управления, предназначенных для ввода идентификатора пользователя и пароля, соответственно. Свойство Text содержит текстовую строку, представляющую текущее состояние элемента управления.
Рис. 3-29. Диалоговое окно с идентификатором пользователя и паролем
private void button2_Click(object sender, System.EventArgs e)
<
Close();
>
Первую из этих ссылок (с надписью www.datarecovery.ru ) необходимо обеспечить таким обработчиком событий:
Первая строка этого обработчика событий обеспечивает изменение внешнего вида ссылки после ее использования:
Параметр e типа System.Windows.Forms.LinkLabelLinkClickedEventArgs предназначен для передачи параметров от элемента управления, вызвавшего появление события. В частности, через свойство e.Link передается ссылка, которую щелкнул пользователь.
Вторая ссылка работает аналогичным образом. Для отправки электронного сообщения мы передаем методу System.Diagnostics.Process.Start наш адрес электронной почты:
private void linkLabel2_LinkClicked(object sender,
System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
<
linkLabel2.Links[linkLabel2.Links.IndexOf(e.Link)].Visited = true;
System.Diagnostics.Process.Start(«mailto:alexandre@frolov.pp.ru»);
>
После использования этой ссылки на экране появится окно почтовой программы, зарегистрированной в системе по умолчанию (рис. 3-31).
Рис. 3-31. Отправка электронного сообщения
Исходный текст приложения UserLogin мы привели в листинге 3-1.
Листинг 3-1. Файл ch03\UserLogin\Form1.cs
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace UserLogin
<
///
/// Summary description for Form1.
///
public class Form1 : System.Windows.Forms.Form
<
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.LinkLabel linkLabel1;
private System.Windows.Forms.LinkLabel linkLabel2;
private System.Windows.Forms.Label label5;
///
/// Required designer variable.
///
private System.ComponentModel.Container components = null;
public Form1()
<
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after
// InitializeComponent call
//
>
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
<
Application.Run(new Form1());
>
private void button1_Click(object sender, System.EventArgs e)
<
MessageBox.Show(«User: » + textBox1.Text + «\n» + «Password: » + textBox2.Text);
>
private void button2_Click(object sender, System.EventArgs e)
<
Close();
>
private void linkLabel1_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
<
linkLabel1.Links[linkLabel1.Links.IndexOf(e.Link)].Visited = true;
System.Diagnostics.Process.Start(linkLabel1.Text);
>
private void linkLabel2_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
<
linkLabel2.Links[linkLabel2.Links.IndexOf(e.Link)].Visited = true;
System.Diagnostics.Process.Start(«mailto:alexandre@frolov.pp.ru»);
>
>
>
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
Если у Вас появится необходимость подключения каких-либо других пространств имен, просто добавьте новые операторы using в конец этого списка.
namespace UserLogin
<
public class Form1 : System.Windows.Forms.Form
<
…
>
>
По мере добавления в окно формы элементов управления, дизайнер форм создает в этом классе различные поля и методы.
Для каждого элемента управления, расположенного в форме, дизайнер форм создает по одному полю соответствующего класса:
Эти поля хранят ссылки, необходимые для выполнения всех операций с элементами управления формы.
Если для реализации функциональности приложения Вам потребуются новые поля, добавьте их после приведенного выше фрагмента кода.
public Form1()
<
InitializeComponent();
//
// TODO: Add any constructor code after
// InitializeComponent call
//
>
Этот метод создает и инициализирует все элементы управления формы, а также задает их размеры и расположение в окне.
На самом первом шаге инициализации, на базе класса System.Resources.ResourceManager создается система управления ресурсами, необходимая для работы с национальными языками и параметрами:
System.Resources.ResourceManager resources = new
System.Resources.ResourceManager(typeof(Form1));
Далее метод InitializeComponent создает все необходимые элементы управления, добавленные в форму на этапе проектирования:
Когда все элементы управления созданы, необходимо их проинициализировать и разместить в окне формы. На время выполнения этой операции метод InitializeComponent отключает на время механизм генерации сообщений, связанных с размещением элементов в окне формы:
Инициализация и размещение элементов управления выполняется путем изменения значений соответствующих свойств.
Подробно о шрифтах мы расскажем в 10 главе, а сейчас только отметим, что первый параметр конструктора класса System.Drawing.Font задает название шрифта, второй — его размер, третий — стиль (обычный, наклонный, жирный и т.д.).
Свойство this.label1.Name задает идентификатор (имя) надписи. С помощью этого идентификатора можно, например, изменять текста надписи или ее другие атрибуты.
Хотя надпись и не получает фокус ввода, дизайнер форм присваивает ей последовательный номер, определяющий порядок, в котором элементы управления получают фокус ввода при использовании клавиши табуляции.
Как видите, инициализация и размещение простой текстовой надписи занимает несколько строк программного текста. К счастью, дизайнер форм создает этот текст для Вас автоматически.
В процессе инициализации полей, предназначенных для ввода текста, определяется значение пяти различных свойств:
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(104, 158);
this.textBox1.Name = «textBox1»;
this.textBox1.Size = new System.Drawing.Size(104, 20);
this.textBox1.TabIndex = 3;
this.textBox1.Text = «»;
Свойство this.textBox1.Text позволяет задать надпись, которая появится в поле ввода сразу после отображения формы. Мы этой возможностью не пользуемся, и поэтому в данное свойство записывается пустая строка.
Вот как происходит инициализация элемента управления, содержащего наше изображение:
//
// pictureBox1
//
this.pictureBox1.Image = ((System.Drawing.Bitmap)
(resources.GetObject(«pictureBox1.Image»)));
this.pictureBox1.Location = new System.Drawing.Point(40, 16);
this.pictureBox1.Name = «pictureBox1»;
this.pictureBox1.Size = new System.Drawing.Size(72, 88);
this.pictureBox1.TabIndex = 7;
this.pictureBox1.TabStop = false;
Подробнее о графических изображениях мы расскажем позже в 10 главе, посвященной рисованию в окне форм.
Размеры и расположение кнопок, их имя, текст и порядок табуляции задается таким же образом, что и для текстовых полей:
//
// button1
//
this.button1.BackColor =
System.Drawing.Color.FromArgb(((System.Byte)(224)),
((System.Byte)(224)), ((System.Byte)(224)));
this.button1.Location = new System.Drawing.Point(264, 160);
this.button1.Name = «button1»;
this.button1.TabIndex = 5;
this.button1.Text = » Войти «;
Дополнительно кнопке назначается обработчик событий:
this.button1.Click += new System.EventHandler(this.button1_Click);
Этот обработчик получит управление, когда пользователь щелкнет кнопку. Исходный текст обработчиков для кнопок нашего приложения уже был описан ранее в этой главе:
private void button1_Click(object sender, System.EventArgs e)
<
MessageBox.Show(«User: » + textBox1.Text + «\n» + «Password: » +
textBox2.Text);
>
private void button2_Click(object sender, System.EventArgs e)
<
Close();
>
Исходные тексты обработчиков событий для полей нашей формы были описаны ранее в разделе «Ссылки на ресурсы Интернета».
Рассмотрим этот процесс подробнее.
Свойство this.AutoScaleBaseSize задает базовый размер для масштабирования, используемый во время отображения формы:
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
При масштабировании формы этот размер сопоставляется с размером системного шрифта.
Цвет фона формы задается при помощи свойства this.BackColor :
this.BackColor = System.Drawing.Color.FromArgb(
((System.Byte)(245)), ((System.Byte)(248)), ((System.Byte)(255)));
Наша форма имеет фоновое графическое изображение. Это изображение задается свойством this.BackgroundImage :
this.BackgroundImage = ((System.Drawing.Bitmap)
(resources.GetObject(«$this.BackgroundImage»)));
Область формы, предназначенная для отображения элементов управления и рисования, называется клиентской областью ( client area ). Размеры этой области определяются свойством this.ClientSize :
Для размещения элементов управления в окне формы используется метод this.Controls.AddRange :
Этому методу передается ссылка на массив добавляемых элементов управления.
Стиль рамки, окантовывающей окно формы, задается свойством this.FormBorderStyle :
Так как мы запросили отображение кнопки помощи в заголовке формы, дизайнер формы установил значение свойства this.HelpButton равным true :
Далее в процессе инициализации метод InitializeComponent назначает форме значок, с помощью которого форма будет представлена на панели задач и в окне переключения приложений:
Кнопки максимизации и минимизации формы не нужны, поэтому свойства this.MaximizeBox и this.MinimizeBox получают значение false :
this.MaximizeBox = false;
this.MinimizeBox = false;
Здесь метод InitializeComponent задает имя формы (свойство this.Name ), текст заголовка окна формы (свойство this.Text ).
Завершив размещение элементов управления в окне формы, метод InitializeComponent разрешает обработку сообщений, связанных с размещением элементов в окне формы:
Дизайнер форм позволяет назначить обработчик события для каждого элемента управления, размещенного в форме. Если в процессе проектирования формы Вы случайно дважды щелкнули элемент управления, для которого не нужно создавать обработчик события, то этот обработчик можно удалить.
Допустим, Вы по ошибке дважды щелкнули окно формы в дизайнере форм. В результате по умолчанию в исходный текст приложения будет добавлен пустой обработчик событий Form1_Load :
private void Form1_Load(object sender, System.EventArgs e)
<
Рис. 3-32. Диалоговое окно событий
Кстати, в этом окне Вы можете не только удалять обработчики событий, но и создавать их (что не менее важно). Для создания обработчика Вам достаточно щелкнуть в этом окне имя нужного события.
Можно удалить обработчик событий и вручную, редактируя текст программы. Однако чтобы это сделать, недостаточно стереть код обработчика события. Еще нужно удалить код, подключающий этот обработчик к элементу управления.
Допустим, при подготовке формы приложения UserLogin Вы по ошибке дважды щелкнули поле ввода идентификатора пользователя. Как результат, в исходном тексте приложения появится тело обработчика сообщения:
private void textBox1_TextChanged(object sender, System.EventArgs e)
<
Этот обработчик позволяет отслеживать процесс ввода текста в поле редактирования. Однако если эта возможность Вам не нужна, удалите исходный текст метода.
Удалите также код, подключающий этот обработчик события к полю редактирования: