Элементы управления
Последнее обновление: 31.10.2015
Элементы управления представляют собой визуальные классы, которые получают введенные пользователем данные и могут инициировать различные события.
Все элементы управления наследуются от класса Control и поэтому имеют ряд общих свойств:
-
Anchor: Определяет, как элемент будет растягиваться
-
BackColor: Определяет фоновый цвет элемента
-
BackgroundImage: Определяет фоновое изображение элемента
-
ContextMenu: Контекстное меню, которое открывается при нажатии на элемент правой кнопкой мыши.
Задается с помощью элемента ContextMenu -
Cursor: Представляет, как будет отображаться курсор мыши при наведении на элемент
-
Dock: Задает расположение элемента на форме
-
Enabled: Определяет, будет ли доступен элемент для использования. Если это свойство имеет значение False,
то элемент блокируется. -
Font: Устанавливает шрифт текста для элемента
-
ForeColor: Определяет цвет шрифта
-
Location: Определяет координаты верхнего левого угла элемента управления
-
Name: Имя элемента управления
-
Size: Определяет размер элемента
-
Width: ширина элемента
-
Height: высота элемента
-
TabIndex: Определяет порядок обхода элемента по нажатию на клавишу Tab
-
Tag: Позволяет сохранять значение, ассоциированное с этим элементом управления
Кнопка
Наиболее часто используемым элементом управления является кнопка. Обрабатывая событие нажатия кнопки, мы может производить те или иные действия.
При нажатии на кнопку на форме в редакторе Visual Studio мы по умолчанию попадаем в код обработчика события Click
,
который будет выполняться при нажатии:
private void button1_Click(object sender, EventArgs e) { MessageBox.Show("Hello World"); }
Оформление кнопки
Чтобы управлять внешним отображением кнопки, можно использовать свойство 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.
Часть 4. Создание Windows-приложений
Технология Windows Forms
Формы и компоненты (Control, UserControl, Form)
Меню, панели задач и панели статуса
Интерфейсные элементы
Управление расположением компонентов
Использование данных
Диалоговые панели общего назначения
Дополнительные компоненты
Отображение данных
Развертывание приложений — технология ClickOnce
Сервисы для клиентских приложений
Поддержка Windows Vista
Технология Windows Presentation Foundation
Компоненты WPF-приложений
Расположение элементов
Ввод данных и генерация команд
Связь с данными
Графика
Медиа и графика
Текст и шрифты
Документы
Типы WPF-приложений
Основные новинки в Visual Studio 2008
Основные новинки в Windows Presentation Foundation 3.5
Совместимость с версией 3.0
Прикладная модель
Графика
Трехмерная графика
Связь с данными
Компоненты
Документы
Аннотации
Взаимодействие Windows Forms и Windows Presentation Foundation
Создание Windows-приложений, или, как их еще называют, толстых клиентов, возможно в Visual Studio 2008 с использованием двух ключевых компонентов .NET Framework: Windows Forms (появился в .NET Framework 1.0) и Windows Presentation Foundation (WPF; появился в ноябре 2006 года в составе .NET Framework 3.0).
Технология Windows Forms
Технология Windows Forms (пространство имен System.Windows.Forms) представляет собой набор классов .NET, реализующих функциональность, присущую стандартным и расширенным компонентам Windows-приложений. Разработчики используют формы и диалоговые окна в качестве контейнеров для размещения различных интерфейсных элементов: кнопок, меню, полей ввода, полей выбора и т.п. Каждый такой интерфейсный элемент представлен соответствующим классом и поддерживает набор методов, свойств и обработчиков событий, которые можно применять для управления представлением компонентов и обеспечения реакции на действия пользователей, производимые с этими компонентами. Классы, реализованные в пространстве имен System.Windows.Forms, можно разделить на несколько функциональных групп, которые мы кратко рассмотрим далее.
Формы и компоненты (Control, UserControl, Form)
Большинство классов, определенных в пространстве имен System.Windows.Forms, наследуют от класса Control. Данный класс обеспечивает базовую функциональность для всех компонентов, которые могут отображаться на форме. Класс Form представляет собой окно Windows-приложения. К окнам относятся диалоговые панели, немодальные окна, MDI-клиенты и родительские окна. В качестве основы для создания собственных интерфейсных элементов следует использовать класс UserControl.
Меню, панели задач и панели статуса
В состав Windows Forms входит большой набор классов, позволяющих создавать собственные панели задач и меню, поддерживающие различные визуальные стили и представления. Для создания панелей задач, меню, контекстных меню и панелей статуса следует использовать классы ToolStrip, MenuStrip, ContextMenuStip и StatusStrip соответственно.
Интерфейсные элементы
В пространстве имен System.Windows.Forms содержится множество классов, реализующих основные интерфейсные элементы Windows-приложений. Компоненты TextBox и ComboBox предназначены для ввода данных, а Label и ListView служат для отображения данных. В пространстве имен System.Windows.Forms также есть компоненты, используемые для активизации каких-либо действий, например Button. Для отображения HTML-документов в Windows-приложениях применяются компонент WebBrowser и соответствующие классы, например HtmlDocument. Компонент MaskedTextBox представляет собой расширенное средство ввода данных на основе шаблонов. При необходимости создания собственного дизайнера форм можно использовать компонент PropertyGrid, отображающий таблицу свойств компонентов, которые можно изменять.
Управление расположением компонентов
Ряд классов из пространства имен System.Windows.Forms используется для управления расположением компонентов на формах или в составе других компонентов. К таким классам относятся FlowLayoutPanel, TableLayoutPanel и SplitContainer. Класс FlowLayoutPanel представляет собой панель, которая динамически размещает свое содержимое горизонтально или вертикально. Класс TableLayoutPanel служит для задания ячеек и рядов для расположения элементов в фиксированной таблице. Класс SplitContainer используется для разделения формы на две или более частей с возможностью изменения размеров каждой из них.
Использование данных
В Windows Forms поддерживаются богатые возможности по связи компонентов с различными источниками данных — базами данных и XML-файлами. Компонент DataGridView представляет собой настраиваемую таблицу для отображения данных с возможностью управления ячейками, рядами, колонками и рамками. Компонент BindingNavigator служит для навигации по данным, отображаемым в форме, и обычно применяется совместно с компонентом BindingSource для перемещения по записям в источнике данных.
Диалоговые панели общего назначения
В Windows поддерживается ряд диалоговых панелей общего назначения, которые используются для унификации таких пользовательских операций, как открытие и сохранение файлов, манипуляции со шрифтами и цветами, а также вывод данных на устройства печати. Классы OpenFileDialog и SaveFileDialog реализуют соответственно отображение диалоговых панелей, позволяющих пользователям выбрать местоположение файла, который планируется открыть или сохранить. Класс FontDialog отображает диалоговую панель для выбора шрифтов, применяемых в приложении. Класс ColorDialog используется для отображения стандартной панели выбора цветов и задания собственных цветовых комбинаций.
Классы PageSetupDialog, PrintPreviewDialog и PrintDialog применяются для отображения диалоговых панелей, позволяющих пользователям управлять различными аспектами вывода информации на устройства печати. Сами же функции управления печатью реализованы в пространствах имен System.Drawing.Printing и System.Windows.Forms.Printing.
Помимо стандартных диалоговых панелей в пространстве имен System.Windows.Forms реализован класс MessageBox, который может использоваться в различных ситуациях, требующих отображения панели сообщений и интерактивного ввода данных от пользователей.
Дополнительные компоненты
Помимо рассмотренных выше компонентов в пространстве имен System.Windows.Forms есть ряд классов, которые не наследуют от класса Control, но, тем не менее, представляют собой визуальные компоненты, которые можно использовать при создании Windows-приложений. К таким классам относятся, например, ToolTip, ErrorProvider, Help и HelpProvider. Класс ToolTip применяется для отображения краткого описания назначения компонента. Класс ErrorProvider служит для отображения информации об ошибках, а классы Help и HelpProvider — справочной информации для пользователей приложения.
Дочерние пространства имен System.Windows.Forms отвечают за расширенную функциональность, связанную с разработкой и выполнением Windows-приложений. К таким пространствам имен относятся:
- System.Windows.Forms.ComponentModel.Com2Interop — содержит вспомогательные классы для отображения панелей свойств компонентов в режиме дизайна;
- System.Windows.Forms.Design — содержит классы, используемые для обеспечения конфигурируемости компонентов Windows Forms в режиме дизайна. Эти классы состоят из класса-дизайнера и набора сервисов, доступных в режиме дизайна. Также в данном пространстве имен есть класс UITypeEditor, применяемый для установки значений ряда типов свойств, и классы, обеспечивающие импорт компонентов ActiveX;
- System.Windows.Forms.Design.Behavior — содержит классы для создания расширений пользовательского интерфейса и поддержки таких расширений в режиме дизайна. В данное пространство имен включены следующие классы:
- Glyph для обработки отрисовки и щелчков мышью,
- Adorner для управления коллекцией классов типа Glyph,
- BehaviourService для управления расширениями интерфейсных элементов в режиме дизайна,
- SnapLine для отображения горизонтальных и вертикальных сегментов, позволяющих пользователям выравнивать компоненты в режиме дизайна;
- System.Windows.Forms.Integration — обеспечивает интеграцию между компонентами Windows Forms и Windows Presentation Foundation (WPF). Содержит классы, позволяющие использовать компоненты Windows Forms на страницах, созданных средствами Windows Presentation Foundation, и компоненты Windows Presentation Foundation в приложениях на основе Windows Forms. Два ключевых класса обеспечивают интеграционные возможности двух технологий — WindowsFormsHost и ElementHost. Класс WindowsFormsHost используется при необходимости отображения компонента Windows Forms на странице, созданной средствами Windows Presentation Foundation. Класс ElementHost служит для отображения элементов WPF в приложениях на основе Windows Forms;
- System.Windows.Forms.Layout — содержит классы, используемые для реализации механизмов расположения элементов на формах или в составе других компонентов. К таким классам относятся LayoutEngine и ArrangedElementCollection. Первый служит в качестве абстрактного класса, используемого компонентами TableLayoutPanel и FlowLayoutPanel для реализации различных способов расположения компонентов. Второй представляет собой коллекцию объектов, которые находятся под управлением LayoutEngine;
- System.Windows.Forms.PropertyGridInternal — обеспечивает поддержку реализации компонента PropertyGrid, который применяется для отображения таблицы свойств компонентов в режиме дизайна;
- System.Windows.Forms.VisualStyles — содержит классы, обеспечивающие отображение компонентов и других интерфейсных элементов Windows-приложений с использованием визуальных стилей. В состав данного пространства имен входят следующие основные классы:
- VisualStyleElement является базовым классом для задания визуальных стилей, поддерживаемых компонентом или интерфейсным элементом. Помимо VisualStyleElement в пространстве имен System.Windows.Forms.VisualStyles содержится большое число вложенных классов, унаследованных от VisualStyleElement, статические свойства которых возвращают визуальные свойства для каждого возможного состояния компонента, части компонента или интерфейсного элемента, поддерживающего визуальные стили. Например, свойство Pressed класса VisualStyleElement.Button.PushButton возвращает тип VisualStyleElement, идентифицирующий визуальный стиль для кнопки в нажатом состоянии,
- VisualStyleRenderer предоставляет методы для отрисовки и получения информации о каждом визуальном элементе (VisualStyleElement) для визуального стиля, поддерживаемого операционной системой, — размер по умолчанию, тип фона и фонового изображения, набор цветов и т.п.,
- VisualStyleInformation предоставляет набор статических свойств для получения информации о текущем визуальном стиле, поддерживаемом операционной системой.
Разработка Windows-приложений выполняется на основе шаблона Windows Forms Application, доступного в ветви Windows для выбранного языка программирования — Visual Basic .NET или Visual C#. Входящий в состав Visual Studio 2008 дизайнер позволяет создавать Windows-приложения перетаскиванием компонентов из палитры доступных компонентов (ToolBox) на поверхность формы и написанием кода для обработки событий, возникающих при активации пользователями тех или иных компонентов, расположенных на форме, а также событий, отражающих жизненный цикл самого Windows-приложения (рис. 1).
Рис. 1. Дизайнер Windows-приложений в Visual Studio
Панель задания свойств компонентов позволяет управлять различными аспектами визуальных элементов, располагаемых на формах, — привязкой к форме, размером, цветом, шрифтами и т.п. Щелчок мышью по компоненту приводит к появлению редактора кода, в котором разработчики описывают действия, выполняемые при активации того или иного интерфейсного элемента, — например действия при нажатии кнопки либо выборе того или иного элемента меню, а также описывают другие части приложения, например действия, которые должны выполняться при начальной загрузке приложения или завершении работы с ним (рис. 2).
Рис. 2. Палитра компонентов
для Windows-приложений
Возможность переключения между визуальным дизайном и редактором кода позволяет максимально наглядно выполнять как собственно разработку интерфейса приложения, так и создание кода, реализующего логику работы самого приложения.
Отображение данных
Как было отмечено выше, технология Windows Forms позволяет не только создавать интерфейсы Windows-приложений, используя входящие в ее состав разнообразные классы, реализующие компоненты интерфейса, но и применять эти интерфейсные элементы для отображения данных, располагаемых в базах данных и XML-файлах, извлекаемых из web-сервисов или других источников.
Источники данных, доступные для приложения в режиме разработки, перечислены в специальном окне Visual Studio — Data Sources. В нем отображаются различные источники данных — базы данных, web-сервисы, объекты в рамках данного проекта и т.п. Создание компонентов, обеспечивающих связь с данными, осуществляется простым перетаскиванием источника данных на форму, включенную в состав проекта. Создать компоненты связи с данными также можно перетаскиванием объектов из окна Data Sources на существующие компоненты, расположенные на форме.
В состав Windows Forms входит компонент, специально разработанный для табличного отображения данных, — DataGridView. Разработчикам предоставляются широкие возможности по управлению этим компонентом: можно изменять настройки ячеек, фиксировать размеры и местоположение определенных рядов и колонок, отображать компоненты внутри ячеек и т.п.
Для обеспечения связи с источниками данных используется компонент BindingSource, который впервые появился в Visual Studio 2005 в составе .NET Framework 2.0. Он представляет собой соединение с источником данных и предоставляет методы для связи компонентов с данными, перемещения по записям, редактирования записей и сохранения изменений непосредственно в источнике данных. Компонент BindingNavigator обеспечивает простой пользовательский интерфейс на основе компонента BindingSource, который позволяет перемещаться между записями в источнике данных.
Развертывание приложений — технология ClickOnce
После того как приложение создано и отлажено, необходимо обеспечить возможность передачи его конечным пользователям. При использовании технологии ClickOnce вы можете развертывать приложения непосредственно из Visual Studio, указав адрес web-сайта, на котором оно будет расположено. Технология ClickOnce управляет всеми элементами и зависимостями вашего приложения и гарантирует корректную установку приложения на клиентском компьютере.
Приложения, развертываемые с помощью ClickOnce, могут быть сконфигурированы таким образом, чтобы они запускались только при наличии сетевого соединения или при наличии и отсутствии такового. При указании на то, что приложение должно поддерживать работу в отсоединенном режиме, ClickOnce добавляет ссылку на приложение в меню Start на пользовательском компьютере — в таком случае приложение запускается без обращения к нему через URL.
При обновлении приложения пользователь публикует новый манифест развертывания (deployment manifest) и новую копию приложения на web-сервере. Технология ClickOnce обнаруживает наличие обновлений и обновляет пользовательские версии, заменяя компоненты приложения и сборки на более новые версии — все это происходит автоматически, написание дополнительного кода не требуется.
В Visual Studio 2008 и .NET Framework 3.5 был реализован ряд улучшений в технологии ClickOnce. К ним относятся поддержка развертывания приложений с нескольких сайтов без необходимости изменения манифестов и возможность управления внешним видом пакетов инсталляции (third-party branding). Утилита Mage.exe, используемая для генерации и редактирования манифестов, применяемых для развертывания приложений средствами ClickOnce, была обновлена до версии 3.5 и теперь поддерживает все ключевые возможности данной технологии.
Развертывание приложений с применением механизма Windows Installer теперь поддерживает новую версию .NET Framework (.NET Framework Launch Condition поддерживает версии 3.0 и 3.5) и полностью совместимо с Windows Vista даже при установке с использованием User Account Control (UAC).
Сервисы для клиентских приложений
Сервисы для клиентских приложений — это новинка в .NET Framework 3.5, позволяющая Windows-приложениям (включая приложения, созданные средствами Windows Forms и Windows Presentation Foundation) обращаться к сервисам ASP .NET, таким как идентификация, роли и профили. Эти сервисы дают разработчикам возможность аутентифицировать пользователей и получать данные о пользовательских ролях и настройках приложения, хранящихся на сервере.
Для включения поддержки сервисов для клиентских приложений необходимо сконфигурировать провайдеров клиентских сервисов в конфигурационном файле приложения или в дизайнере проектов Visual Studio (рис. 3). Эти провайдеры подключаются к серверу через модель расширения и позволяют приложениям обращаться к web-сервисам через стандартные программные интерфейсы для получения данных об аутентификации, ролях и настройках. Сервисы клиентских приложений также поддерживают работу в отсоединенном режиме — в этом случае используются данные, сохраненные в локальном кэше данных.
Рис. 3. Конфигурация сервисов клиентских приложений
Для проверки пользователей через существующие сервисы аутентификации ASP .NET AJAX используется статический метод Membership.ValidateUser. Он обращается к провайдеру клиентских сервисов и возвращает значение типа Boolean, указывающее на результат проверки пользователя.
Для получения ролевой информации от ролевых сервисов ASP .NET AJAX применяется метод IsInRole интерфейса IPrincipal, получаемого из статического свойства Thread.CurrentPrincipal. Метод IsInRole требует указания имени роли в качестве параметра и возвращает значение типа Boolean, указывающее на принадлежность пользователя к указанной роли.
Сервисы клиентских приложений также можно применять для получения пользовательских настроек, хранящихся в сервисе профилей ASP .NET AJAX. Клиентский сервис обращения к настройкам на сервере интегрирован с сервисами хранения прикладных настроек, которые появились в .NET Framework 2.0. Для получения настроек необходимо сгенерировать класс Settings для вашего проекта, используя вкладку Settings в дизайнере проектов Visual Studio. На странице Settings следует применить кнопку Load Web Settings для получения настроек с сервера и добавления их в класс Settings, который будет содержать настройки для всех аутентифицированных пользователей или всех анонимных пользователей.
На C# настройки доступны через Properties.Settings.Default, а на Visual Basic — через My.Settings.
Классы, перечисленные в табл. 1, обеспечивают поддержку сервисов для клиентских приложений.
Поддержка Windows Vista
Приложения, созданные с использованием технологии Windows Forms, должны работать под управлением Windows Vista без каких-либо проблем. Более того, в большинстве случаев интерфейс подобных приложений будет обновлен таким образом, как будто они были специально написаны для Windows Vista. Например, обновлены диалоговые панели общего назначения (см. классы типа CommonFileDialog). Помимо этого в .NET Framework 3.5 обеспечена поддержка иконки Shield (свойство Shield в классе SystemIcons), используемой в User Account Control (UAC).
В среде разработки Visual Studio 2008 также появилась возможность автоматической генерации манифестов для Windows-приложений. Доступ к манифесту по умолчанию (файл app.manifest) осуществляется нажатием кнопки View UAC Settings в панели настроек свойств проекта на вкладке Application (рис. 4).
Рис. 4. Панель настройки свойств проекта
Технология Windows Presentation Foundation
Вторая технология для создания Windows-приложений — это Windows Presentation Foundation (WPF). WPF — один из ключевых компонентов .NET Framework 3.0, который пополнился рядом расширений и дополнений в новой версии библиотеки классов — .NET Framework 3.5. Приложения на основе WPF создаются с помощью специального шаблона проекта — WPF Application, который доступен для типов проектов Windows на языках программирования Visual Basic .NET и Visual C#.
Создание WPF-приложений практически не отличается от создания приложений на основе Windows Forms: нужно перетащить компоненты на форму и создать обработчики событий. Но есть и ряд существенных отличий: в среде разработчика, помимо дизайнера, окна настройки свойств и галереи компонентов, есть еще окно, содержащее код на языке XAML, — eXtensible Application Markup Language. Этот язык используется в WPF для описания пользовательского интерфейса.
Например, на языке XAML описание основного окна приложения выглядит следующим образом:
<Window x:Class=»Window1»
xmlns=»http://schemas.microsoft.com/winfx/2006/xaml/presentation»
xmlns:x=»http://schemas.microsoft.com/winfx/2006/xaml»
Title=»Window1» Height=»300» Width=»300»>
<Grid>
</Grid>
</Window>
При разработке приложения с использованием Windows Forms можно перетащить компонент из галереи на форму или, при необходимости, написать код, инициирующий и создающий требуемый компонент. При перетаскивании компонента на форму весь необходимый код генерируется автоматически. При создании WPF-приложения можно также создавать компоненты на языке XAML или перетаскивать их из галереи на окно WPF-приложения.
Язык XAML представляет собой иерархическую организацию элементов, каждый из которых заключен в угловые скобки. Например, кнопка будет описана так:
<Button></Button>
С помощью атрибутов описывается внешний вид интерфейсных элементов. Атрибуты состоят из названия, символа присваивания (=) и значения атрибута в кавычках. Например, для задания высоты кнопки можно написать:
<Button Height=”23”></Button>
При перетаскивании компонентов из галереи в дизайнер Visual Studio автоматически генерирует соответствующий XAML-код. Например, при перетаскивании кнопки на форму будет сгенерирован следующий код:
<Button Height=»23» HorizontalAlignment= »Left» Margin=»10,10,0,0»
Name=»Button1» VerticalAlignment=»Top» Width=»75»>Button</Button>
Двойной щелчок мышью по компоненту приводит к генерации кода обработчика события, который может выглядеть так:
Sub ButtonOKClicked(ByVal Sender As Object, _
ByVal e As RoutedEventArgs)
End Sub
Компоненты WPF-приложений
Как уже было сказано, в WPF-приложениях, подобно приложениям на основе Windows Forms, также используются компоненты (рис. 5). В табл. 2 перечислены основные группы компонентов, применяемых в WPF-приложениях. Все они описаны в пространстве имен System.Windows.Controls.
Рис. 5. Ключевые сервисы Windows Presentation Foundation
Ввод данных и генерация команд
Часто компонентам требуется обнаружение пользовательских действий и обеспечение реакции на них. В системе ввода данных в WPF поддерживаются как прямые, так и перенаправленные события, которые могут использоваться для ввода текстовой информации, управления фокусом, позиционирования мыши и т.п.
Расположение элементов
При создании приложений разработчики располагают компоненты с помощью дизайнера. Ключевым требованием для подсистемы управления расположением элементов является динамичная реакция на изменение размеров окна или настройки дисплея. В состав WPF входит система управления расположением элементов, которая позволяет разработчикам не заботиться об изменениях в размерах окон или величине шрифта — все необходимые корректировки интерфейса происходят автоматически.
Система управления расположением интерфейсных элементов базируется на ряде компонентов, входящих в состав WPF:
- Canvas — дочерние компоненты могут сами управлять своим расположением;
- DockPanel — дочерние компоненты выравниваются по краям панели;
- Grid — дочерние компоненты располагаются в рядах и колонках;
- StackPanel — дочерние компоненты накладываются друг на друга вертикально или горизонтально;
- VirtualizingStackPanel — дочерние компоненты выравниваются по одной линии — горизонтальной или вертикальной;
- WrapPanel — дочерние компоненты располагаются слева направо и «заворачивают» на следующую строку, когда заканчивается место на текущей строке.
Связь с данными
В основе возможности WPF отображать данные из различных источников лежит класс Binding, в задачу которого входит связь определенного компонента с источником данных. Так же как и в Windows Forms, в WPF поддерживаются механизмы отображения данных, навигации по данным и внесения изменений в оригинальные данные в случае их изменения в компоненте.
Все, что мы рассматривали выше, в той или иной мере можно реализовать и при помощи технологии Windows Forms. Реальные преимущества использования технологии Windows Presentation Foundation заключаются в мощном графическом ядре и программном интерфейсе для отрисовки различных графических элементов, которые мы рассмотрим далее.
Графика
В Windows Presentation Foundation реализовано расширяемое, масштабируемое и гибкое графическое ядро, с помощью которого можно работать с графикой, не зависящей от текущего разрешения и аппаратной платформы, использовать двух- и трехмерные графические примитивы и анимацию, а также, при необходимости, задействовать все доступные аппаратные ресурсы системы для получения максимальной производительности.
Двумерные примитивы
В WPF поддерживаются основные двумерные векторные примитивы — прямоугольники, эллипсы и т.п. Такие примитивы могут быть интерактивными — они реагируют на ввод с клавиатуры или манипуляции мышью.
Двумерная геометрия
Двумерные примитивы, включенные в состав WPF, подходят для решения большинства задач, но иногда могут потребоваться какие-то специальные формы — в этом случае используется двумерная геометрия, поддерживаемая в WPF для отрисовки замкнутых или открытых форм, кривых и т.п. Двумерная геометрия может применяться для обрезания изображений, тестирования ввода или для отрисовки двумерных данных.
Двумерные эффекты
В состав поддержки двумерной графики, реализованной в Windows Presentation Foundation, входит набор визуальных эффектов, таких как градиентная заливка, использование битовых масок и графических изображений, эффекты с использованием видео, вращение, масштабирование и ряд других.
Трехмерная отрисовка
В состав Windows Presentation Foundation также входит поддержка трехмерной графики и отрисовки, интеграция которой с двумерной графикой позволяет создавать различные представления данных.
Анимация
Применение анимации, реализованной в Windows Presentation Foundation, позволяет управлять размерами элементов, поворачивать их на любой угол, изменять их визуальные характеристики и т.п. Большинство классов, входящих в состав WPF, поддерживают анимацию — это утверждение распространяется даже на классы, создаваемые разработчиками.
Медиа и графика
В Windows Presentation Foundation полноценно реализована поддержка аудиовизуальных данных (для этого используется элемент MediaElement) — таким образом, в приложениях можно применять графические изображения, видео- и аудиоинформацию.
Текст и шрифты
Для обеспечения отрисовки текстовой информации в состав Windows Presentation Foundation включены следующие возможности:
- поддержка шрифтов OpenType;
- расширения технологии ClearType;
- возможность использования аппаратных ускорителей;
- возможность интеграции текстовой информации, мультимедийных данных, графики и анимации;
- поддержка локальных версий шрифтов и возможность подстановки шрифтов в случае их отсутствия.
Документы
В Windows Presentation Foundation реализована полноценная поддержка работы с тремя типами документов:
- документы с нефиксированным отображением (flow documents) — оптимизированы для просмотра и отображения и могут динамически реагировать на изменение размеров окон или настроек дисплея;
- документы с фиксированным отображением (fixed documents) — предназначены для точного отображениях их содержимого (принцип What You See Is What You Get, WYSIWYG) и вывода на устройство печати;
- документы, созданные в соответствии со спецификацией XML Paper Specification (XPS), — являются расширенной версией документов с фиксированным отображением. XPS-документы описываются XML-схемой и представляют собой постраничное отображение электронного документа. Спецификация XPS является открытой, кроссплатформенной и позволяет существенно упростить создание, распространение, вывод на устройства печати и архивирование документов. К основным характеристикам XPS-документов относятся:
- упаковка XPS-документов в виде файлов ZipPackage, которые соответствуют спецификации Open Packaging Conventions (OPC). Для этого используется программный интерфейс System.IO.Packaging,
- возможность отображения документов в браузере и обычном приложении,
- возможность создания и управления документами из WPF-приложений,
- поддержка на уровне спулера Windows Vista,
- поддержка на уровне принтеров ведущих производителей,
- интеграция с компонентом DocumentViewer, используемым для отображения документов.
Помимо этого в WPF обеспечивается поддержка создания, отображения и управления документами, возможность включения аннотаций и вывода документов на устройства печати.
Типы WPF-приложений
Существует два типа WPF-приложений: так называемые полноценные приложения, которые выполняются как обычные Windows-приложения, и приложения, выполняемые в браузере (XAML Browser Applications, XBAP-приложения).
При создании полноценных приложений пользователь оперирует такими элементами, как Window для создания окон и диалоговых панелей, которые могут быть доступны при активации соответствующих команд меню или панелей задач. Помимо этого возможно использование панелей сообщений и стандартных диалоговых панелей — MessageBox, OpenFileDialog, SaveFileDialog и PrintDialog.
При создании приложений, выполняемых в браузере, пользователь создает страницы (Page) и страничные функции (PageFunction(T)). Навигация по страницам осуществляется с помощью гипертекстовых ссылок (класс Hyperlink). WPF-приложения могут размещаться в Internet Explorer версий 6 и 7. Существуют две дополнительные возможности хостинга WPF-приложений в браузере — использование фреймов для отображения страниц в рамках окна или замена всего окна на компонент NavigationWindow.
Основные новинки в Visual Studio 2008
Самой важной новинкой в Visual Studio 2008 стало включение в состав продукта полноценного дизайнера WPF-приложений (рис. 6). Он поддерживает создание и редактирование XAML-файлов с полной поддержкой Intellisense, интеграцию с редакторами кода на VB .NET и С# для написания обработчиков событий, возможность работы с несколькими окнами (например, в одном окне отображается XAML-код, а в другом — его визуальное представление), а также режим дизайна с использованием Visual Design Surface с возможностью перетаскивания компонентов из галереи редактирования их свойств в специальном окне и применением компонентов-контейнеров типа Grid, Canvas и DockPanel или StackPanel для расположения компонентов на форме.
Рис. 6. Дизайнер WPF-приложений
Основные новинки в Windows Presentation Foundation 3.5
Далее мы рассмотрим основные изменения и дополнения в версии Windows Presentation Foundation 3.5.
Совместимость с версией 3.0
- Все приложения, созданные для WPF 3.0, будут корректно работать под управлением WPF 3.5;
- если приложения, созданные для WPF 3.5, используют функции, поддерживаемые в версии 3.0, то они будут корректно работать под управлением WPF 3.0;
- в WPF 3.5 применяется новое пространство имен — http://schemas.microsoft.com/netfx/2007/xaml/presentation. Его рекомендуется использовать при создании приложений для WPF 3.5. Помимо этого можно применять и пространство имен, определенное для WPF 3.0.
Прикладная модель
В версии 3.5 появился ряд изменений в прикладной модели WPF. К таким изменениям, в частности, относятся:
- поддержка моделей расширения для визуальных и невизуальных компонентов, выполняющихся как самостоятельные приложения или как XBAP-приложения. Модули расширения создаются на базе классов, реализованных в пространстве имен System.AddIn и компонента FrameworkElement;
- поддержка выполнения XBAP-приложений под управлением браузера Firefox 2.0 — для этого необходимо использовать plug-in for WPF 3.5;
- возможность обмена cookie между XBAP- и web-приложениями, выполняющимися в рамках одного сайта;
- улучшенная поддержка IntelliSense для XAML;
- расширенная поддержка локализации приложений.
Графика
У разработчиков появилась возможность кэшировать графические изображения, загружаемые по протоколу HTTP в локальном кэше (Microsoft Internet Explorer Temporary File Cache), — таким образом, последующие загрузки файлов будут происходить с локального диска, а не из Интернета. В зависимости от размера графического изображения можно получить значительные улучшения в производительности приложений. Возможность кэширования поддерживается следующими функциями:
- BitmapImage.UriCachePolicy;
- BitmapDecoder.Create(Uri, BitmapCreateOptions, BitmapCacheOption,
- RequestCachePolicy);
- BitmapFrame.Create(Uri, RequestCachePolicy);
- BitmapFrame.Create(Uri, BitmapCreateOptions, BitmapCacheOption, RequestCachePolicy).
Событие BitmapSource.DecodeFailed возникает в тех случаях, когда невозможна загрузка графического изображения из-за нарушений данных в заголовке изображения.
Трехмерная графика
В объектной модели поддержки трехмерной графики появились следующие расширения:
- обеспечивается поддержка концепций UIElement — ввод данных, фокус, событийная модель и т.п. Новые классы — UIElement3D и унаследованные от него ContainerUIElement3D и ModelUIElement3D, появившиеся в WPF 3.5, — полностью поддерживают эти возможности;
- новый класс Viewport2DVisual3D обеспечивает поддержку размещения интерактивных двумерных элементов в трехмерных объектах;
- реализованы новые сервисы трансформации — GeneralTransform3D и GeneralTransform2DTo3D. Класс GeneralTransform3DTo2D позволяет выполнять трансформации между объектами Visual3D и двух- и трехмерными объектами в обе стороны.
Связь с данными
В WPF 3.5 появился ряд расширений для механизмов связи компонентов с данными. К ним относятся:
- новый механизм отладки, позволяющий более просто отлаживать связи компонентов с данными. Новое свойство PresentationTraceSources.TraceLevel, которое может использоваться с объектами, участвующими в обеспечении связи с данными, позволяет получать информацию о статусе текущей связи. Статический класс PresentationTraceSources реализован в пространстве имен System.Diagnostics;
- проверка на уровне модели данных с поддержкой интерфейса IDataErrorInfo, который позволяет бизнес-объектам проверять валидность вводимых данных. Данный интерфейс задает индексатор, который получает на вход имя свойства, а возвращает строку, используя новое правило проверки вводимой информации — DataErrorValidationRule;
- в классах Binding и MultiBinding появились два новых свойства — ValidatesOnExceptions и ValidatesOnDataErrors, которые могут использоваться вместо правил ExceptionValidationRule и DataErrorValidationRule;
- модель связи с данными с поддержкой LINQ и XLINQ на уровне BindingListCollectionView — этот механизм позволяет осуществлять связь с данными через коллекции BindingList(T).
Компоненты
В Windows Presentation Foundation 3.5 произошел ряд изменений в некоторых компонентах — далее мы кратко рассмотрим эти изменения.
В компоненте TextBox появилась поддержка Input Method Editor (IME). В классе FrameworkTextComposition реализован ряд новых свойств — CompositionOffset, CompositionLength, ResultOffset и ResultLength. Класс FrameworkTextComposition используется как свойство TextCompositionEventArgs.TextComposition, когда пользователь вводит текст в компоненте TextBox с помощью средств Input Method Editor (IME) и возникают события TextInput, TextInputUpdate или TextInputStart.
В компоненте RichTextBox теперь сохраняются расширенные объекты типа TextElement — это происходит при сохранении объекта TextElement и при работе с областью обмена данными. Такая возможность поддерживается на уровне перечисленных ниже классов:
- класс TextRange содержит новый метод Save(Stream, String, Boolean), последний параметр которого указывает, требуется поддержка объектов TextElement или нет;
- класс TextElementEditingBehaviorAttribute позволяет указать атрибуты для расширенного объекта TextElement: если значения атрибутов TextElementEditingBehaviorAttribute.IsMergeable и TextElementEditingBehaviorAttribute.IsTypographicOnly равны false, то RichTextBox сохраняет содержимое объекта TextElement при редактировании содержимого RichTextBox. Новое свойство IsDocumentEnabled, появившееся у компонента RichTextBox, позволяет указать, должны ли интерфейсные элементы принимать данные от пользователя;
- класс TextBoxBase пополнился новым свойством — UndoLimit, которое позволяет указать максимальное число действий, запоминаемых компонентом.
Компонент SoundPlayerAction теперь может загружать аудиофайлы, расположенные по URI-адресам.
Документы
У классов FlowDocumentPageViewer, FlowDocumentScrollViewer и FlowDocumentReader появилось свойство Selection, которое возвращает свойство TextSelection, представляющее выбранный в документе фрагмент.
Аннотации
Поддержка механизмов аннотаций расширилась возможностью обнаружения соответствий аннотаций аннотированным объектам. Новый интерфейс IAnchorInfo и новый метод GetAnchorInfo добавлены в класс AnnotationHelper, который используется для реализации описанной выше функциональности.
Взаимодействие Windows Forms и Windows Presentation Foundation
Для обеспечения взаимодействия Windows Presentation Foundation и Windows Forms существует два подхода. Первый заключается в хостинге WPF-приложений в окне WIn32 — в этом случае вы сможете использовать богатые графические возможности WPF в обычных Windows-приложениях. Ключевой компонент для реализации данного подхода — HwndSource, который обеспечивает взаимодействие двух технологий на уровне ссылок на окно (window handle).
Второй подход решает обратную задачу — хостинг Win32-окна в WPF-приложении. В этом случае у вас появляется возможность хостинга стандартных компонентов в WPF-приложениях и обмена данными между двумя типами приложений. Ключевой компонент для реализации данного подхода — класс HwndHost, который представляет собой окно в виде WPF-элемента, который может быть добавлен в стандартную цепочку WPF-элементов. Класс HwndHost предоставляет программную модель, которая может использоваться для решения различных задач интеграции двух технологий, например для обеспечения обработки сообщений, поступающих окну.
***
На этом мы завершаем наше знакомство с ключевыми новинками в .NET Framework 3.5 и Visual Studio 2008, связанными с созданием Windows-приложений. В следующем разделе мы рассмотрим создание web-приложений.
КомпьютерПресс 10’2008
Windows Forms, WPF или UWP и Как создать визуальный проект C#
На самом деле, холивар, плюс я мог не указать какие-то актуальные проблемы или указать уже решённые.
При работе на C# и ряде других языков, входящих в экосистему .NET, в настоящее время есть несколько подходов к написанию «приложений с интерфейсом» (то есть, имеющих форму — окно с интерфейсными компонентами Windows):
1. Windows Forms — классический UI-фреймворк, отрисовка выполняется с помощью библиотек Windows User32 и GDI+.
2. WPF (Windows Presentation Foundation) — современная подсистема для построения графических интерфейсов, основанная на использовании ля создания интерфейсов языка декларативной разметки XAML и отрисовке компонент с помощью DirectX.
3. UWP (Universal Windows Platform) платформа, впервые представленная в Windows 10. Цель — создание универсальных приложений, запускаемых на декстопе и мобильном устройстве без изменений в коде.
Преимущества Windows Forms:
- WYSIWYG-дизайнер форм;
- Компонентная архитектура;
- Поддержка невизуальных компонентов;
- Поддержка детерминированного уничтожения;
- Полная интеграция с базовыми библиотеками .NET;
- Нативные элементы управления идеально вписываются в тему Windows, потому что являются её частью;
- Экономное потребление системных ресурсов;
- При грамотном использовании компонентной модели рутинная работа может быть сведена к нулю, и программу с большим количеством однотипных форм можно написать за день.
Недостатки Windows Forms:
- Привязка данных только к свойствам и только по смене фокуса;
- При масштабировании экрана в новых Windows может «съехать» раскладка формы, технология была изначально не рассчитана на современные возможности масштабирования;
- В основе технологии лежат нативные элементы управления Windows, их внешний вид сложно изменить, и типовое приложение выглядит достаточно скромно, и для преодоления этого недостатка требуются сторонние библиотеки наподобие Infragistics или DevExpress;
- Есть вероятность потери большого количества работы при крахе дизайнера форм. Ошибки нередко возникают при работе со сторонними компонентами.
Преимущества WPF:
- При ошибке в работе дизайнера ничего фатального произойти не может, потому что внешний вид приложения описывается как xaml (основанный на xml язык разметки для приложений);
- Можно настроить внешний вид стандартных элементов управления практически как угодно, плюс разработать свои нестандартные элементы управления;
- Проблемы при масштабировании экрана в новых Windows возникают гораздо реже, чем при использовании Windows Forms;
- Привязка данных гибко настраивается;
- Поддержка анимации, звука, 3D графики.
Недостатки WPF:
- Писать xaml гораздо более трудоёмко, чем пользоваться дизайнером Windows Forms. Кроме того, декларативный код требует большей концентрации внимания и аккуратности при написании, а отлаживать его почти невозможно. В целом, архитектура технологии не располагает к быстрой разработке, сложнее автоматизировать рутину;
- Непредсказуемое поведение при изменении темы Windows. Теоретически, WPF подстраивается под тему Windows, но на практике её элементы управления могут выглядеть по-разному в зависимости от темы Windows, и всё равно не нативно;
- Ограниченная интеграция с базовыми библиотеками .NET Framework;
- Как следствие, отсутствует поддержка невизуальных компонентов и детерминированного уничтожения. Компонентная модель поддерживается лишь выборочно;
- Неудобная система задания расположения элементов управления через явные номера строк и столбцов в самом распространённом контейнере. При изменении во внешнем виде приложения нужно их исправлять во всех элементах управления;
- Постоянно что-нибудь масштабируется и в результате размывается — шрифты, растровые картинки. Проблема зависит от монитора, видеокарты и темы Windows;
- Использование рекомендуемого Microsoft паттерна MVVM (Model-View-ViewModel) приводит к раздуванию объёма исполняемого кода.
- Отсутствует диалог выбора директории из коробки;
- Отсутствует поддержка MDI из коробки. Поскольку это базовая функция практически в любом приложении, приходится либо делать самостоятельно, либо искать сторонние решения;
- Высокое потребление системных ресурсов.
UWP — похожая на WPF технология, к её преимуществам можно отнести:
- Интеграция с магазинами приложений;
- Возможность разрабатывать приложение параллельно под разные платформы (Windows, Android);
- Встроенная поддержка диалогов.
Недостатки UWP:
- Отсутствует возможность подключения к базе данных;
- Работает только в новых версиях Windows, начиная с 10.
По впечатлениям разработчиков, WPF быстрее работает на новых компьютерах, а Windows Forms на старых.
Можно сделать вывод, что типовые потребности в разработке стандартных приложений лучше закрывает Windows Forms. WPF имеет смысл использовать для специфических задач, требующих нестандартной векторной графики и не требующих хорошей совместимости программы с разными типами компьютеров. UWP имеет смысл использовать для разработки тонких клиентов популярных сервисов под разные платформы.
Типовой состав проекта Windows Forms: Visual Studio создаёт довольно много файлов, поэтому каждое приложение размещается в новой папке проекта. На рисунке показана типовая структура проекта с одной формой, а ниже в описано назначение основных файлов (пути указаны от открытой папки проекта на рисунке).
Папка проекта C# внутри папки решения
- ../ WindowsFormsApp1.sln где WindowsFormsApp1 – имя решения, в данном случае стандартное. Относится к категории группы проектов, объединенных в одно решение. Организует все элементы проекта (проектов) в одно общее решение
- Form1.cs содержит класс формы, которая по умолчанию запускается при старте приложения
- Form1.Designer.cs содержит определение компонентов формы, добавленных на форму в графическом дизайнере (графический дизайнер Windows Forms на данный момент официально доступен только в Visual Studio)
- WindowsFormsApp1.csproj стандартный файл проекта C#, который соответствует назанию проекта (по умолчанию названию каталога) и описывает все его настройки
- WindowsFormsApp1.csproj.user дополнительный файл проекта C#, который хранит специфичные для текущего пользователя настройки
- Program.cs определяет класс Program, который запускается при старте приложения и запускает форму Form1
- Form1.resx хранит ресурсы формы. Как правило, ресурсы используются для создания однообразных форм сразу для нескольких языковых культур
- app.config позволяет настроить способ, которым общеязыковая среда выполнения будет находить и загружать файлы сборки
- Properties (вложенная папка) организует хранение параметров для работы приложения
- ../packages (папка) хранит внешние библиотеки (пакеты), если таковые подключались. Данные об используемых в проекте пакетах в этом случае прописаны в файле packages.config
Обратите внимание, что при архивировании проекта пакеты папки, значки которых на рисунке вычеркнуты, можно предварительно удалить из папки проекта, чтобы уменьшить объём хранимого или пересылаемого архива.
Предполагается, что мы создали проект Windows Forms или Windows Forms App по следующему алгоритму:
1. Запустив Visual Studio, нажмём «Создание проекта», выберем язык и тип проекта, нажмём «Далее»:
Создание проекта C#, шаг 1
Заметим, что разница между двумя типами проектов «Приложение Windows Forms» состоит в том, что Windows Forms App использует технологию .net core, а Windows forms app .NET Framework, соответственно, технологию .net framework.
2. При необходимости поменяем имя проекта и решения, укажем целевую папку, включим опцию «Поместить решение и проект в одном каталоге», если проект будет единственным в решении, нажмём «Создать»:
Создание проекта C#, шаг 2
При макете окон по умолчанию мы получили следующую картину:
Окно проекта C# по умолчанию
С помощью перетаскивания мышью закрепив справа «Панель элементов» и окно «Свойства» получаем удобный для разработки несложных приложений интерфейс:
Удобный для разработки несложных приложений интерфейс
Основные элементы окна Visual Studio:
- Обозреватель решений позволяет наглядно увидеть структуру приложения и включённые в него или связанные с ним файлы, а также открыть их;
- Окно Конструктора или Кода, переключение между этими режимами делается первыми пунктами меню Вид (Код, Конструктор) или указанными в этом меню «горячими клавишами»; в режиме Конструктора мы создаём интерфейс приложения и обработчики его событий, в режиме Кода – пишем наполнение созданных функций;
- Панель элементов, позволяет добавить (перетащить) в окно Конструктора элементы интерфейса приложения;
- Окно Свойства позволяет изменить свойства объектов, выбранных в конструкторе, а также назначить обработчики для событий этих объектов. Обратите внимание на кнопки сортировки свойств (по категориям или по алфавиту), переключения между отображением свойств и событий, а также на область описания выбранного свойства или события внизу данного окна. Как правило, значения свойств можно вводить с клавиатуры или выбирать из предложенных списков, а для создания обработчика события достаточно выполнить двойной щелчок мышью на нужном событии из списка;
- В верхнем меню находятся списки выбора конфигурации приложения и кнопка сборки + запуска (с зелёным треугольником).
- При компиляции, сборке или отладке приложения в нижней части окна приложения появляются дополнительные сведения, а также сообщения об ошибках.
Этот материал подробнее и с парой примеров приложений, файл «Основы Windows Forms» PDF (707 Кб)
27.01.2023, 11:48 [2342 просмотра]
К этой статье пока нет комментариев, Ваш будет первым
Компоненты в Visual Studio делятся на два типа: визуальные и невизуальные. Визуальные компоненты (метки, кнопки, поля ввода и т. д.) появляются на форме. Невизуальные компоненты (такие, как таймер) появляются на специальной панели и видимы только во время конструирования формы в виде имен со значками. Во время выполнения программы невизуальные компоненты не отображаются.
Доступ к компонентам .NET можно получить из панели Toolbox (рис. 5.10). Если ее не видно, то нужно выполнить в меню команду View | Toolbox.
Рис. 5.10. Панель Toolbox с компонентами
Для вашего удобства все элементы управления сгруппированы по разделам. Вы можете создавать свои разделы и помещать в них любые компоненты, но для начала лучше оставить все по умолчанию, поскольку здесь все достаточно удобно продумано. В разделе All Windows Forms (Все Windows-формы) находятся все компоненты. Если вы забыли, в каком разделе искать нужный элемент управления, можете раскрыть этот раздел и найти нужный элемент в нем. Внутри разделов все компоненты отсортированы по именам.
Компоненты на форме можно перетаскивать мышью, визуально устанавливая их положение. Когда вы выделяете компонент, обратите внимание на точки, которые появляются вокруг контура выделения. В те стороны, на которых есть жирные точки, можно растягивать компонент. Например, выделите форму, и у нее на рамке выделения окажутся точки только справа и снизу. Это значит, что вы можете изменять высоту и ширину формы перемещением правого и нижнего краев формы.
Попробуйте установить на форму кнопку Button из раздела Common Controls (Общие элементы управления). Выделите ее и убедитесь, что вокруг кнопки появляются жирные точки во всех направлениях, а это значит, что с кнопкой можно
делать все, что угодно.
Попробуйте теперь перетащить на форму компонент-метку Label. Выделите ее. Тут есть чему удивиться, потому что у этого компонента нет квадратов по контуру,
а есть только маленький квадрат в левом верхнем углу компонента. Это значит, что у компонента нельзя изменять размеры, но можно изменять его положение. На самом деле изменять размеры можно, просто по умолчанию компонент создается в режиме авторазмера.
Все визуальные элементы управления содержат среди предков класс Control. Этот класс наделяет компоненты всеми необходимыми им свойствами и методами.
Давайте пробежимся по основным свойствам компонентов, чтобы не повторяться в будущем, — тем более, что многие из них мы уже видели у формы:
- Anchor — свойство позволяет определить, к какой стороне родительского компонента прикреплять компонент;
- BackColor — цвет фона;
- Cursor — курсор;
- Dock — выравнивание;
- Font — шрифт;
- ForeColor — цвет переднего плана;
- Height — высота элемента управления;
- Left — левая позиция компонента относительно родителя;
- Location — положение;
- MaximumSize — максимальный размер элемента управления;
- MinimumSize — минимальный размер элемента управления;
- Name — название объекта, т. е. имя переменной для объекта элемента управ-
ления; - Padding — отступы со всех сторон родительского компонента/формы;
- Size — размер компонента: ширина и высота;
- Top — позиция компонента по вертикали относительно родителя;
- Visible — если равен true, то компонент виден, иначе нет;
- Width — ширина компонента.
Несколько замечаний по поводу свойства Anchor. По умолчанию компоненты прикрепляются к левой и верхней сторонам родителя. Если прикрепить их к левой и правой, то при изменении размера формы будут изменяться и размеры компонента. Прикрепление как бы указывает, что расстояние от компонента до края формы не должно изменяться, а, значит, при изменении формы приходится изменять размеры компонента. Если прикрепить компонент только к правой стороне, то при изменении размера формы он будет двигаться вместе с правой кромкой окна как хвостик, потому что в этом случае расстояние от правой кромки до компонента не должно меняться.
Как изменять прикрепление? Выделите свойство Anchor и щелкните по кнопке вызова выпадающего списка в редакторе свойств. Появится небольшое окно (рис. 5.11), в котором от центра в разные стороны идут полоски. Темные полоски говорят о том, что в эту сторону сделано прикрепление, а белые — о том, что прикрепления нет. Щелкайте по полоскам, чтобы устанавливать или убирать прикрепления.
Рис. 5.11. Окно установки якорей
Рис. 5.12. Окно выравнивания Dock
Еще одно свойство, на котором следует остановиться: Dock. Если щелкнуть по выпадающему списку в редакторе свойств для Dock, то появится маленькое окно, которое представляет собой небольшой компонент. Он разбит на секторы, как показано на рис. 5.12, только подписей на русском у вас не будет. Эти подписи я добавил в рисунок для удобства.
Щелкая по секторам, вы выравниваете свой компонент на поверхности компонента контейнера, на котором он стоит. Например, если ваш компонент стоит на поверхности формы, и вы щелкнете по самому верхнему сектору для выравнивания по верху, то ваш компонент растянется вдоль верхней кромки окна, как это делают меню и панели в большинстве приложений. Таким способом очень просто и удобно создавать мощные и гибкие интерфейсы.
Некоторые компоненты могут прятать определенные свойства, но большинство, все же, отображает их.
Это бесплатная глава книги Библия C#. В новом издании эта глава переписана с учетом универсальных приложений Windows, а старая версия главы, которая не потеряла еще своей актуальности стала бесплатной и доступной всем.
Все исходные коды главы 5 Библии C#
1.
Тема 4.2. Элементы управления
2.
Введение в Windows Forms
• Для создания графических интерфейсов с
помощью платформы .NET применяются
разные технологии — Window Forms, WPF,
приложения для магазина Windows Store
(для ОС Windows 8/8.1/10).
• Однако наиболее простой и удобной
платформой до сих пор остается Window
Forms или формы.
3.
• Внешний вид приложения является нам
преимущественно через формы.
• Формы являются основными
строительными блоками.
• Они предоставляют контейнер для
различных элементов управления.
• А механизм событий позволяет элементам
формы отзываться на ввод пользователя, и,
таким образом, взаимодействовать с
пользователем.
4.
• Если запустить приложение, то отобразится
одна пустая форма.
• Проект с пустой формой имеет несколько
компонентов:
5.
• Стартовой точкой входа в графическое
приложение является класс Program,
расположенный в файле Program.cs:
6.
• С помощью
специального
окна Properties
(Свойства)
справа Visual
Studio
предоставляет
удобный
интерфейс для
управления
свойствами
элемента:
7.
Основные свойства:
• Name: устанавливает имя формы — точнее имя
класса, который наследуется от класса Form
• BackColor: указывает на фоновый цвет формы.
Щелкнув на это свойство, мы сможем выбрать
тот цвет, который нам подходит из списка
предложенных цветов или цветовой палитры
• BackgroundImage: указывает на фоновое
изображение формы
• BackgroundImageLayout: определяет, как
изображение, заданное в свойстве
BackgroundImage, будет располагаться на
форме.
8.
Основные свойства:
• ControlBox: указывает, отображается ли меню
формы. В данном случае под меню
понимается меню самого верхнего уровня, где
находятся иконка приложения, заголовок
формы, а также кнопки минимизации формы
и крестик. Если данное свойство имеет
значение false, то мы не увидим ни иконку, ни
крестика, с помощью которого обычно
закрывается форма
• Cursor: определяет тип курсора, который
используется на форме
9.
Основные свойства:
• Enabled: если данное свойство имеет значение
false, то она не сможет получать ввод от
пользователя, то есть мы не сможем нажать на
кнопки, ввести текст в текстовые поля и т.д.
• Font: задает шрифт для всей формы и всех
помещенных на нее элементов управления.
Однако, задав у элементов формы свой шрифт,
мы можем тем самым переопределить его
• ForeColor: цвет шрифта на форме
10.
Основные свойства:
• FormBorderStyle: указывает, как будет
отображаться граница формы и строка
заголовка. Устанавливая данное свойство в
None можно создавать внешний вид
приложения произвольной формы
• HelpButton: указывает, отображается ли
кнопка справки формы
• Icon: задает иконку формы
• Location: определяет положение
по отношению к верхнему левому углу экрана,
если для свойства StartPosition установлено
значение Manual
11.
Основные свойства:
• MaximizeBox: указывает, будет ли доступна
кнопка максимизации окна в заголовке формы
• MinimizeBox: указывает, будет ли доступна
кнопка минимизации окна
• MaximumSize: задает максимальный размер
формы
• MinimumSize: задает минимальный размер
формы
• Opacity: задает прозрачность формы
12.
Основные свойства:
• Size: определяет начальный размер формы
• StartPosition: указывает на начальную
позицию, с которой форма появляется на
экране
• Text: определяет заголовок формы
• TopMost: если данное свойство имеет
значение true, то форма всегда будет
находиться поверх других окон
13.
Основные свойства:
• Visible: видима ли форма, если мы хотим
скрыть форму от пользователя, то можем
задать данному свойству значение false
• WindowState: указывает, в каком состоянии
форма будет находиться при запуске: в
нормальном, максимизированном или
минимизированном
14.
• Чтобы
добавить еще
одну форму в
проект,
нажмем на
имя проекта в
окне Solution
Explorer
(Обозреватель
решений)
правой
кнопкой мыши
и выберем
Add(Добавить)>Windows
Form…
15.
Элемент GroupBox
• GroupBox представляет собой специальный
контейнер, который ограничен от
остальной формы границей.
• Он имеет заголовок, который
устанавливается через свойство Text.
• Чтобы сделать GroupBox без заголовка, в
качестве значения свойства Text просто
устанавливается пустая строка.
16.
Элемент GroupBox
• Нередко этот элемент используется для
группирования переключателей элементов RadioButton, так как позволяет
разграничить их группы.
17.
Элемент Panel
• Элемент Panel представляет панель и также,
как и GroupBox, объединяет элементы в
группы.
• Она может визуально сливаться с остальной
формой, если она имеет то же значение цвета
фона в свойстве BackColor, что и форма.
• Чтобы ее выделить можно кроме цвета
указать для элемента границы с помощью
свойства BorderStyle, которое по умолчанию
имеет значение None, то есть отсутствие
границ.
18.
Элемент Panel
• Также если панель имеет много элементов,
которые выходят за ее границы, мы можем
сделать прокручиваемую панель, установив
ее свойство AutoScroll в true
19.
Элемент FlowLayoutPanel
• Элемент FlowLayoutPanel является
унаследован от класса Panel, и поэтому
наследует все его свойства.
• Однако при этом добавляя
дополнительную функциональность.
• Так, этот элемент позволяет изменять
позиционирование и компоновку дочерних
элементов при изменении размеров формы
во время выполнения программы.
20.
Элемент FlowLayoutPanel
• Свойство элемента FlowDirection позволяет
задать направление, в котором направлены
дочерние элементы.
• По умолчанию имеет значение LeftToRight то есть элементы будут располагаться
начиная от левого верхнего края.
• Следующие элементы будут идти вправо.
21.
Элемент FlowLayoutPanel
• Это свойство также может принимать
следующие значения:
– RightToLeft — элементы располагаются от
правого верхнего угла в левую сторону
– TopDown — элементы располагаются от левого
верхнего угла и идут вниз
– BottomUp — элементы располагаются от левого
нижнего угла и идут вверх
22.
23.
• Элемент TableLayoutPanel также
переопределяет панель и располагает
дочерние элементы управления в виде
таблицы, где для каждого элемента имеется
своя ячейка.
• Если необходимо поместить в ячейку более
одного элемента, то в эту ячейку добавляется
другой компонент TableLayoutPanel, в который
затем вкладываются другие элементы.
24.
• Чтобы установить нужное число строки
столбцов таблицы, мы можем использовать
свойства Rows и Columns соответственно.
• Выбрав один из этих пунктов в окне Properties
(Свойства), отобразится следующее окно для
настройки столбцов и строк
25.
• В поле Size Type можно указать размер
столбцов / строк. Нам доступны три
возможные варианта:
– Absolute: задается абсолютный размер для строк
или столбцов в пикселях
– Percent: задается относительный размер в
процентах. Если нам надо создать резиновый
дизайн формы, чтобы ее строки и столбцы, а также
элементы управления в ячейках таблицы
автоматически масштабировались при изменении
размеров формы, то нам нужно использовать
именно эту опцию
– AutoSize: высота строк и ширина столбцов задается
автоматически в зависимости от размера самой
большой в строке или столбце ячейки
26.
• Также мы можем комбинировать эти
значения, например, один столбец может
быть фиксированным с абсолютной
шириной, а остальные столбцы могут иметь
ширину в процентах.
27.
• В этом диалоговом окне мы также можем
добавить или удалить строки и столбцы.
• В тоже время графический дизайнер в Visual
Studio не всегда сразу отображает изменения в
таблице — добавление или удаление строк и
столбцов, изменение их размеров, поэтому,
если изменений на форме никаких не
происходит, надо ее закрыть и потом открыть
заново в графическом дизайнере.
28.
• Для каждого элемента управления мы
можем определить свойство Location,
которое задает координаты верхнего
левого угла элемента относительно
контейнера.
• При переносе элемента с панели
инструментов на форму это свойство
устанавливается автоматически.
29.
• В окне Свойств можно вручную поправить
координаты положения элемента:
30.
• С помощью свойства Size можно задать
размеры элемента:
31.
• Дополнительные возможности по
позиционировании элемента позволяет
определить свойство Anchor.
• Это свойство определяет расстояние между
одной из сторон элемента и стороной
контейнера.
• И если при работе с контейнером мы будем
его растягивать, то вместе с ним будет
растягиваться и вложенный элемент.
32.
• По умолчанию у каждого добавляемого
элемента это свойство равно Top, Left:
33.
• Можно задать четыре возможных значения
для этого свойства или их комбинацию:
– Top
– Bottom
– Left
– Right
34.
• Свойство Dock позволяет прикрепить
элемент к определенной стороне
контейнера.
• По умолчанию оно имеет значение None,
но также позволяет задать еще пять
значений:
35.
• Top: элемент прижимается к верхней границе
контейнера
• Bottom: элемент прижимается к нижней
границе контейнера
• Left: элемент прижимается к левой стороне
контейнера
• Right: элемент прикрепляется к правой
стороне контейнера
• Fill: элемент заполняет все пространство
контейнера
36.
• Элемент TabControl позволяет создать
элемент управления с несколькими
вкладками.
• И каждая вкладка будет хранить некоторый
набор других элементов управления, как
кнопки, текстовые поля и др.
• Каждая вкладка представлена
классом TabPage.
37.
• Чтобы настроить вкладки элемента
TabControl используем свойство TabPages.
• При переносе элемента TabControl с панели
инструментов на форму по умолчанию
создаются две вкладки — tabPage1 и
tabPage2.
38.
• Изменим их отображение с помощью
свойства TabPages:
39.
Окно редактирования/добавления и
удаления вкладок
40.
• Каждая вкладка представляет своего рода
панель, на которую мы можем добавить
другие элементы управления, а также
заголовок, с помощью которого мы можем
переключаться по вкладкам.
• Текст заголовка задается с помощью
свойства Text.
41.
• Элемент SplitContainer позволяет создавать
две разделенные сплитером панели.
• Изменяя положение сплитера, можно
изменить размеры этих панелей.
42.
• Элементы управления представляют собой
визуальные классы, которые получают
введенные пользователем данные и могут
инициировать различные события.
• Все элементы управления наследуются от
класса Control и поэтому имеют ряд общих
свойств
43.
Свойства
• Anchor: Определяет, как элемент будет
растягиваться
• BackColor: Определяет фоновый цвет элемента
• BackgroundImage: Определяет фоновое
изображение элемента
• ContextMenu: Контекстное меню, которое
открывается при нажатии на элемент правой
кнопкой мыши. Задается с помощью элемента
ContextMenu
44.
Свойства
• Cursor: Представляет, как будет отображаться
курсор мыши при наведении на элемент
• Dock: Задает расположение элемента на
форме
• Enabled: Определяет, будет ли доступен
элемент для использования. Если это свойство
имеет значение False, то элемент блокируется.
• Font: Устанавливает шрифт текста для
элемента
• ForeColor: Определяет цвет шрифта
45.
Свойства
• Location: Определяет координаты верхнего
левого угла элемента управления
• Name: Имя элемента управления
• Size: Определяет размер элемента
• Width: ширина элемента
• Height: высота элемента
• TabIndex: Определяет порядок обхода
элемента по нажатию на клавишу Tab
• Tag: Позволяет сохранять значение,
ассоциированное с этим элементом
управления
46.
• Наиболее часто используемым элементом
управления является кнопка.
• Обрабатывая событие нажатия кнопки, мы
может производить те или иные действия.
• При нажатии на кнопку на форме в
редакторе Visual Studio мы по умолчанию
попадаем в код обработчика события Click,
который будет выполняться при нажатии
47.
• Чтобы управлять внешним отображением
кнопки, можно использовать
свойство FlatStyle.
• Оно может принимать следующие значения:
– Flat — Кнопка имеет плоский вид
– Popup — Кнопка приобретает объемный вид при
наведении на нее указателя, в иных случаях она
имеет плоский вид
– Standard — Кнопка имеет объемный вид
(используется по умолчанию)
– System — Вид кнопки зависит от операционной
системы
48.
• Как и для многих элементов управления, для
кнопки можно задавать изображение с помощью
свойства BackgroundImage.
• Можно также управлять размещением текста и
изображения на кнопки.
• Для этого надо использовать
свойство TextImageRelation.
• Оно приобретает следующие значения:
– Overlay: текст накладывается на изображение
– ImageAboveText: изображение располагается над
текстом
– TextAboveImage: текст располагается над
изображением
– ImageBeforeText: изображение располагается перед
текстом
– TextBeforeImage: текст располагается перед
изображением
49.
Label
• Для отображения простого текста на форме,
доступного только для чтения, служит
элемент Label.
• Чтобы задать отображаемый текст метки,
надо установить свойство Text элемента.
50.
LinkLabel
• Особый тип меток представляют элементы
LinkLabel, которые предназначены для вывода
ссылок, которые аналогичны ссылкам,
размещенным на стандартных веб-станиц.
• Также, как и с обычными ссылками на вебстраницах, мы можем по отношению к данному
элементу определить три цвета:
– Свойство ActiveLinkColor задает цвет ссылки при
нажатии
– Свойство LinkColor задает цвет ссылки до нажатия, по
которой еще не было переходов
– Свойство VisitedLinkColor задает цвет ссылки, по
которой уже были переходы
51.
• Кроме цвета ссылки для данного элемента мы
можем задать свойство LinkBehavior, которое
управляет поведением ссылки.
• Это свойство принимает четыре возможных
значения:
– SystemDefault: для ссылки устанавливаются
системные настройки
– AlwaysUnderline: ссылка всегда подчеркивается
– HoverUnderline: ссылка подчеркивается только при
наведении на нее курсора мыши
– NeverUnderline: ссылка никогда не подчеркивается
52.
Текстовое поле TextBox
• Для ввода и редактирования текста
предназначены текстовые поля — элемент
TextBox.
• Так же как и у элемента Label текст
элемента TextBox можно установить или
получить с помощью свойства Text.
53.
Текстовое поле TextBox
• По умолчанию при переносе элемента с
панели инструментов создается однострочное
текстовое поле.
• Для отображения больших объемов
информации в текстовом поле нужно
использовать его свойства Multiline и
ScrollBars.
• При установке для свойства Multiline значения
true, все избыточные символы, которые
выходят за границы поля, будут переноситься
на новую строку.
54.
• Кроме того, можно сделать прокрутку
текстового поля, установив для его
свойства ScrollBars одно из значений:
– None: без прокруток (по умолчанию)
– Horizontal: создает горизонтальную прокрутку при
длине строки, превышающей ширину текстового
поля
– Vertical: создает вертикальную прокрутку, если
строки не помещаются в текстовом поле
– Both: создает вертикальную и горизонтальную
прокрутку
55.
Элемент MaskedTextBox
• Элемент MaskedTextBox по сути
представляет обычное текстовое поле.
• Однако данные элемент позволяет
контролировать ввод пользователя и
проверять его автоматически на наличие
ошибок.
56.
CheckBox
• Элемент CheckBox или флажок
предназначен для установки одного из двух
значений: отмечен или не отмечен.
• Чтобы отметить флажок, надо установить у
его свойства Checked значение true.
57.
CheckBox
• Кроме свойства Checked у элемента
CheckBox имеется свойство CheckState,
которое позволяет задать для флажка одно
из трех состояний — Checked (отмечен),
Indeterminate (флажок не определен отмечен, но находится в неактивном
состоянии) и Unchecked (не отмечен)
58.
Radiobutton
• На элемент CheckBox похож элемент
RadioButton или переключатель.
• Переключатели располагаются группами, и
включение одного переключателя означает
отключение всех остальных.
• Чтобы установить у переключателя
включенное состояние, надо присвоить его
свойству Checked значение true.
59.
Radiobutton
• Для создания группы переключателей, из
которых можно бы было выбирать, надо
поместить несколько переключателей в
какой-нибудь контейнер, например, в
элементы GroupBox или Panel.
• Переключатели. находящиеся в разных
контейнерах, будут относиться к разным
группам
60.
ListBox
• Элемент ListBox представляет собой
простой список.
• Ключевым свойством этого элемента
является свойство Items, которое как раз и
хранит набор всех элементов списка.
61.
ListBox
• Элемент ListBox представляет собой простой список.
• Ключевым свойством этого элемента является
свойство Items, которое как раз и хранит набор всех
элементов списка.
• Элементы в список могут добавляться как во время
разработки, так и программным способом. В Visual
Studio в окне Properties (Свойства) для элемента
ListBox мы можем найти свойство Items. После
двойного щелчка на свойство нам отобразится окно
для добавления элементов в список:
62.
Элемент ComboBox
• Элемент ComboBox образует выпадающий
список и совмещает функциональность
компонентов ListBox и TextBox.
• Для хранения элементов списка в
ComboBox также предназначено
свойство Items.
63.
Элемент ComboBox
• Подобным образом, как и с ListBox, мы
можем в окне свойств на свойство Items и
нам отобразится окно для добавления
элементов ComboBox:
64.
Элемент CheckedListBox
• Элемент CheckedListBox представляет
симбиоз компонентов ListBox и CheckBox.
• Для каждого элемента такого списка
определено специальное поле CheckBox,
которое можно отметить.
65.
Элемент CheckedListBox
• Все элементы задаются в CheckedListBox
задаются в свойстве Items.
• Также, как и для элементов ListBox и
ComboBox, мы можем задать набор
элементов.
• По умолчанию для каждого добавляемого
нового элемента флажок не отмечен:
66.
• Чтобы поставить отметку в checkBox рядом
с элементом в списке, нам надо сначала
выделить элемент и дополнительным
щелчком уже установить флажок.
• Однако это не всегда удобно, и с помощью
свойства CheckOnClick и установке для него
значения true мы можем определить сразу
выбор элемента и установку для него
флажка в один клик.
67.
NumericUpDown
• Элемент NumericUpDown представляет
пользователю выбор числа из
определенного диапазона.
• Для определения диапазона чисел для
выбора NumericUpDown имеет два
свойства: Minimum (задает минимальное
число) и Maximum (задает максимальное
число).
68.
• Само значение элемента хранится в
свойстве Value:
69.
• По умолчанию элемент отображает
десятичные числа.
• Однако если мы установим его
свойство Hexadecimal равным true, то
элемент будет отображать все числа в
шестнадцатеричной системе.
70.
DomainUpDown
• Элемент DomainUpDown предназначен для
ввода текстовой информации.
• Он имеет текстовое поле для ввода строки
и две стрелки для перемещения по списку
строк:
71.
• Список для DomainUpDown задается с
помощью свойства Items. Список можно сразу
упорядочить по алфавиту. Для этого надо
свойству Sorted присвоить значение true.
• Чтобы можно было циклично перемещаться
по списку, то есть при достижении конца или
начала списка его просмотр начинался с
первого или последнего элемента, надо
установить для свойства Wrap значение true.
72.
ImageList
• ImageList не является визуальным
элементом управления, однако он
представляет компонент, который
используется элементами управления.
• Он определяет набор изображений,
который могут использовать такие
элементы, как ListView или TreeView.
73.
ImageList
• Чтобы его добавить в проект, его также
можно перенести на форму с Панели
Инструментов:
74.
• Так как компонент не является визуальным
элементом, то мы увидим его под формой.
• Ключевым свойством ImageList является
свойство Images, которое задает коллекцию
изображений.
75.
ListView
• Элемент ListView представляет список, но с
более расширенными возможностями, чем
ListBox.
• В ListView можно отображать сложные
данные в различных стобцах, можно
задавать данным изображения и
пиктограммы.
76.
• Все элементы, как и в других списковых
визуальных компонентах, задаются с
помощью свойства Items.
• Но в отличие от ListBox или ComboBox, если
мы через панель Свойств откроем окно
редактирования элементов ListView:
77.
78.
TreeView
• TreeView представляет визуальный элемент
в виде дерева.
• Дерево содержит узлы, которые
представляют объекты TreeNode. Узлы
могут содержать другие подузлы и могут
находиться как скрытом, так и в раскрытом
состоянии.
• Все узлы содержатся в свойстве Nodes.
79.
Если мы нажем в панели Свойств на
свойство Nodes, то нам откроется окно
редактирования узлов TreeView:
80.
TrackBar
• TrackBar представляет собой элемент,
который с помощью перемещения
ползунка позволяет вводить числовые
значения.
81.
Timer
• Timer является компонентом для запуска
действий, повторяющихся через
определенный промежуток времени. Хотя
он не является визуальным элементом, но
его также можно перетащить с Панели
Инструментов на форму:
82.
Индикатор прогресса ProgressBar
• Элемент ProgressBar служит для того, чтобы
дать пользователю информацию о ходе
выполнения какой-либо задачи.
83.
DateTimePicker
• DateTimePicker представляет
раскрывающийся по нажатию календарь, в
котором можно выбрать дату. собой
элемент, который с
помощью
перемещения
ползунка позволяет
вводить числовые
значения.
84.
MonthCalendar
• С помощью MonthCalendar также можно
выбрать дату, только в данном случае этот
элемент представляет сам календарь,
который не надо раскрывать:
85.
Элемент PictureBox
• PictureBox предназначен для показа изображений.
• Он позволяет отобразить файлы в формате bmp, jpg, gif,
а также метафайлы ищображений и иконки.
• Для установки изображения в PictureBox можно
использовать ряд свойств:
– Image: устанавливает объект типа Image
– ImageLocation: устанавливает путь к изображению на диске
или в интернете
– InitialImage: некоторое начальное изображение, которое
будет отображаться во время загрузки главного
изображения, которое хранится в свойстве Image
– ErrorImage: изображение, которое отображается, если
основное изображение не удалось загрузить в PictureBox
86.
• Чтобы установить изображение в Visual
Studio, надо в панели Свойств PictureBox
выбрать свойство Image.
• В этом случае нам откроется окно импорта
изображения в проект, где мы собственно и
сможем выбрать нужное изображение на
компьютере и установить его для
PictureBox:
87.
88.
Элемент WebBrowser
• WebBrowser предоставляет функции
интернет-браузера, позволяя загружать и
отображать контент из сети интернет.
• В то же время важно понимать, что данный
элемент не является полноценным веббраузером, и возможности по его
настройки и изменению довольно
ограничены.
89.
Элемент NotifyIcon
• Элемент NotifyIcon позволяет задать
значок, который будет отображаться при
запуске приложения в панели задач.