Создание первого приложения WPF

К статье прилагается видеоролик, которой можно посмотреть здесь.

Не знакомы с WPF? Из этого пошагового руководства вы узнаете о конструкторе WPF и сможете создать первое приложение WPF. Вы научитесь создавать, перемещать и выравнивать элементы управления, создавать привязки данных и изменять коллекции элементов управления с помощью мощных возможностей конструктора WPF для Visual Studio 2010. В заключение мы разработаем форму для проведения опроса.

Требования

См. раздел «Настройка Visual Studio для разработки приложений WPF и Silverlight».

Содержание

Создание проекта
Изменение заголовка окна
Создание элементов управления
Декоративные элементы и линии привязки
Приложение Survey. Заголовок формы
Приложение Survey. Элементы управления формы. Часть 1
Приложение Survey. Элементы управления формы. Часть 2
Приложение Survey. Элементы управления формы. Часть 3

Создание проекта

В первых четырех коротких разделах данного руководства рассказывается о том, как с помощью конструктора WPF создавать, перемещать, выравнивать и изменять размеры элементов управления.

Чтобы создать проект для первого приложения WPF:

  1. Запустите Visual Studio 2010.
  2. В меню File («Файл») выберите команду New («Создать»), а затем команду New Project («Проект»).


    Рис. 1. Выбор меню создания проекта

  3. Откроется диалоговое окно New Project («Создание проекта»).

  4. Рис. 2. Диалоговое окно создания проекта

Примечание.В поле со списком Target Framework Version («Целевая версия платформы») по умолчанию выбрано последнее использованное значение. При создании проекта убедитесь в том, что выбрана нужная версия платформы.

  • Шаг 1. Выберите язык (Visual Basic или C#), а затем выберите пункт Windows.
  • Шаг 2. Выберите пункт WPF Application («Приложение WPF»).
  • Шаг 3. Введите имя проекта.

    Совет.Хотя в имени проекта можно использовать пробелы, делать это не рекомендуется.

  • Шаг 4. Нажмите кнопку ОК, чтобы создать новое приложение WPF.

Изменение заголовка окна

Присвоим приложению заголовок. Свойство Title находится в верхней левой части хрома окна.

  1. Выберите объект Window. Для этого щелкните границу окна в конструкторе или поверхность разработки за пределами содержимого окна.

    • Обратите внимание, что на четырех углах объекта Window появились декоративные элементы для изменения его размера с помощью мыши.
    • Обратите внимание, что в окне Properties («Свойства») отображаются свойства объекта Window и выбрано свойство Title.

    Примечание. У каждого элемента управления есть свойство по умолчанию, которое автоматически выбирается в окне свойств при выборе такого элемента управления.

  2. Измените значение свойства Title на First WPF Application («Первое приложение WPF»).

    Рис. 3. Окно свойств

    Конструктор обеспечивает синхронизацию всех окон инструментов и представления.

    Рис. 4. Конструктор WPF и редактор XAML

Создание элементов управления

Добавлять элементы управления можно с помощью панели элементов и путем редактирования текста в редакторе XAML.

С помощью панели элементов можно разными способами добавлять элементы управления:

  1. Щелкните элемент управления на панели элементов, чтобы выбрать его, а затем — поверхность разработки там, где требуется создать элемент управления.
  2. Щелкните элемент управления на панели элементов, чтобы выбрать его, а затем перетащите его на поверхность разработки туда, где требуется создать элемент управления.
  3. Щелкните элемент управления и перетащите его из панели элементов на поверхность разработки (см. рис. 5 ниже).
  4. Когда целевой элемент управления выбран на поверхности разработки, дважды щелкните элемент управления на панели элементов.

    Рис. 5. Создание элемента управления

  5. Попробуйте создать на поверхности разработки элемент управления Button («Кнопка»), воспользовавшись описанными способами. Создайте кнопку в положении, показанном на рис. 5.

  6. Обратите внимание, что при перетаскивании кнопки на поверхность разработки отображаются голубые направляющие элемента управления Grid («Сетка»).

Декоративные элементы и линии привязки

На поверхности разработки конструктора WPF отображаются декоративные элементы, предназначенные для перемещения и изменения размеров элементов управления с помощью мыши. Они также предоставляют визуальную информацию о выравнивании элемента управления и другие сведения об элементе.

При перемещении или изменении размера элементов управления в конструкторе WPF отображаются различные линии привязки, помогающие разместить элемент управления на поверхности разработки относительно других элементов.

  1. Декоративные элементы для выравнивания:
    • Выберите кнопку на поверхности разработки.
    • В окне Properties («Свойства») выберите вид по категориям и пролистайте список категории Layout («Макет»), как показано на рис. 6 ниже.
    • Кнопка на рис. 6 выровнена по верхней и левой границам. Такое выравнивание аналогично закреплению Windows Forms.
      • Верхняя граница кнопки закреплена на расстоянии 37 пикселей от верха сетки (см. второе значение в свойстве Margin на рис. ниже).
      • Левая граница кнопки закреплена на расстоянии 38 пикселей от левой границы сетки (см. первое значение в свойстве Margin на рис. ниже).

        Рис. 6. Декоративные элементы для выравнивания

        Совет.Тип свойства Margin — Thickness. Значения свойства соответствуют левому, верхнему, правому и нижнему полям. Свойство типа Thickness также может быть представлено одним или двумя значениями. Если задано одно значение, все четыре стороны принимаются равными. Если заданы два значения, первое значение относится к левому и правому полям, а второе — к верхнему и нижнему.

    • Чтобы запустить приложение, нажмите клавишу F5.
      • После запуска приложения измените размер окна. Обратите внимание, что при изменении размера окна кнопка не перемещается.
    • Измените значение свойства HorizontalAlignment в окне Properties («Свойства») и обратите внимание на изменение декоративных элементов. Зеленая стрелка на рис. 7 ниже указывает на декоративный элемент HorizontalAlignment.
      • После изменения свойства HorizontalAlignment еще раз запустите приложение и измените размер окна. Обратите внимание, что при изменении размера окна кнопка перемещается либо изменяется ее размер в зависимости от способа выравнивания.
      • Кроме того, изменить значение свойства HorizontalAlignment можно, щелкнув стрелку декоративного элемента или круглый декоративный элемент, на который указывает зеленая стрелка.
    • Повторите аналогичные действия для свойства VerticalAlignment. Синяя стрелка на рис. 7 ниже указывает на декоративный элемент VerticalAlignment.
    • Восстановите выравнивание кнопки по верхней и левой границам.
    • Красная стрелка на рис. 7 указывает на декоративный элемент для изменения размера. Перемещение декоративного элемента изменения размера меняет размер элемента управления в направлении движения мыши.

      Рис. 7. Декоративные элементы для выравнивания и изменения размера

  2. Граничные линии привязки:
    • Чтобы переместить элемент управления на поверхности разработки, выберите элемент и, удерживая нажатой левую кнопку мыши, переместите его. Отпустите левую кнопку мыши по завершении перемещения.
    • При перемещении элемента управления вблизи контейнерного элемента управления, такого как сетка, появляется граничная линия привязки. Она помогает равномерно расположить один или несколько элементов управления относительно границы контейнера.
    • Обратите внимание на два числа в левом красном прямоугольнике на рис. 8 ниже. Числа 12 и 12 указывают, что верхний левый угол кнопки находится на 12 пикселей ниже и на 12 пикселей правее сетки.
    • В правом красном прямоугольнике на рис. 8 содержится число 191. Оно указывает количество пикселей от правой границы кнопки до границы сетки.
    • Если при перемещении элемент управления выходит за граничную линию привязки, он будет привязан к границе контейнерного элемента управления.

      Рис. 8. Граничные линии привязки

      Совет.Чтобы отключить линии привязки при перемещении элемента управления, удерживайте нажатой клавишу ALT во время перемещения по поверхности разработки. Используйте клавиши со стрелками для сдвига элемента управления в нужное положение по пикселям!

  3. Линии привязки элементов управления:
    • Добавьте в форму еще одну кнопку, как показано на рисунке ниже.
    • На рис. 9 показаны линии привязки элементов управления, которые отображаются, когда границы одного элемента выровнены с границами другого. Число 20 — это количество пикселей, разделяющих две кнопки.

      Рис. 9. Линии привязки элементов управления

  4. Опорные линии привязки текста:
    • На рис. 10 показана опорная линия привязки текста, которая отображается, когда два текстовых элемента управления выровнены. Число 20 — это количество пикселей, разделяющих две кнопки.

      Рис. 10. Опорные линии привязки текста

Приложение Survey. Заголовок формы

Удалите кнопки и другие элементы управления, размещенные на поверхности разработки. Чтобы удалить элемент управления, выделите его и нажмите клавишу DELETE.

Нажмите сочетание клавиш CTRL+S или щелкните значок сохранения на панели инструментов, чтобы сохранить приложение.

Первое приложение WPF

Остальная часть данного руководства посвящена созданию простого приложения для проведения опроса. В процессе создания этого приложения вы познакомитесь со многими новыми функциями конструктора WPF.

Рис. 11. Готовое приложение

  1. Создайте на поверхности разработки элемент управления типа TextBlock.
    • Элемент управления TextBlock находится на вкладке Controls («Элементы управления») панели элементов.
  2. Когда выбран новый элемент TextBlock, в окне Properties («Свойства») выберите представление в алфавитном порядке и введите в поле поиска значение «text». Обратите внимание, что по мере ввода происходит быстрая фильтрация списка свойств.

    Совет.Функция поиска в окне свойств фильтрует свойства и экономит много времени при разработке приложений. Это очень полезная функция.

  3. Измените значение свойства Text на Survey («Опрос»).

    Рис. 12. Заголовок формы. Свойство Text элемента управления TextBlock

  4. Далее с помощью окна Properties («Свойства») будет задано положение элемента TextBlock заголовка формы.
    • В окне Properties («Свойства») выберите вид по категориям и пролистайте список до категории Layout («Макет»), как показано на рис. 13 ниже.
    • Задайте свойства HorizontalAlignment, VerticalAlignment и Margin, как указано на рисунке ниже. Обратите внимание на расположение элемента TextBlock на поверхности разработки.
  5. Введите в поле поиска строку «font». С помощью редактора категории шрифтов увеличьте размер шрифта до 18.

    Рис. 13. Заголовок формы. Расположение элемента управления TextBlock

    Примечание.На рис. 12 и 13 обратите внимание на изображение элемента TextBlock в окне предварительного просмотра слева от имени элемента управления. Такое же окно предварительного просмотра отображается в структуре документа при наведении указателя мыши на элементы управления в списке.

Приложение Survey. Элементы управления формы. Часть 1

Настало время добавить в интерфейс пользователя элементы управления, с которыми пользователь может взаимодействовать во время выполнения приложения.

  1. Добавьте четыре элемента управления, показанные на рис. 14: два элемента типа Label, один типа TextBox и один типа ComboBox.
    • Задайте для всех элементов управления выравнивание Top («Сверху») и Left («Слева»).
    • Используйте линии привязки элементов управления при выравнивании и выборе положений элементов.
    • Выберите элемент TextBox. В окне Properties («Свойства») измените значение свойства Name на «txtName».
    • Выберите элемент ComboBox. Измените свойство Name на «cboProduct».

      Рис. 14. Элементы управления формы

  2. Выберите верхний элемент Label на поверхности разработки.
    • В поле поиска в окне свойств введите «con».
    • Измените значение свойства Content на «_Name».
  3. Выберите нижний элемент Label на поверхности разработки.
    • Обратите внимание, что в окне свойств выбрано свойство Content этого элемента.
    • Измените значение свойства Content на «_Product».

      Рис. 15. Свойство Content элемента Label

      Примечание

      Для отображения текста в элементе управления Label используется свойство Content. У вас может возникнуть вопрос: почему в элементе Label текст задается в свойстве Content, а в элементе TextBlock — в свойстве Text? Потому что у этих двух свойств различные типы данных и сопутствующие функции.

      Свойство Content элемента Label может содержать практически все: текст, изображение, сетку и т. д.

      Элемент управления Label может связывать клавишу доступа с другим элементом управления. При нажатии клавиши доступа фокус будет перемещен в целевой элемент управления. При этом используется свойство Content элемента Label.

      Свойство Text элемента TextBlock особенное. Оно может содержать текст или элементы встроенного потока содержимого. Дополнительные сведения см. в разделеhttps://msdn.microsoft.com/ru-ru/library/bb613554.aspx. Встроенное содержимое позволяет отображать многострочное форматированное содержимое в элементе TextBlock.

  4. Чтобы определить клавишу доступа элемента Label, необходимо указать клавишу доступа и целевой элемент управления.
    • Строка «_N» связывает сочетание клавиш ALT+N с клавишей доступа этого элемента Label. Когда нажата клавиша ALT, в элементе Label отображается строка «Name».
    • В WPF целевой элемент управления задается с использованием привязки данных.
    • Построитель привязок данных в окне свойств предоставляет интерфейс пользователя для создания необходимой привязки данных.
  5. Задайте свойство Target для клавиши доступа.
    • На следующих шагах будет создана привязка имени элемента. Такая привязка позволяет связывать элемент управления со свойством другого именованного объекта.
    • Выберите элемент управления TextBox и введите строку «tar» в поле поиска окна свойств (см. рис. 16 ниже).
    • Красная стрелка указывает на маркер свойства. Значок маркера свойства зависит от заданного значения свойства и места его задания.
    • Щелкните маркер свойства. Откроется контекстное меню.
    • Выберите команду Apply Data Binding («Применить привязку данных»).

      Рис. 16. Привязка свойства Target

    • На вкладке Source («Исходный элемент») выберите пункт ElementName. Появится список именованных элементов управления интерфейса пользователя.
    • Выберите элемент txtName. Обратите внимание, что заголовок вкладки Source («Исходный элемент») изменяется при выборе элементов.
      • Для привязки свойства Target не требуется задавать путь.
      • Чтобы закрыть построитель привязок данных, нажмите клавишу ВВОД или щелкните мышью за пределами построителя.

        Рис. 17. Построитель привязок данных

    • Давайте протестируем работу клавиши доступа ALT+N. Запустите приложение и нажмите сочетание клавиш ALT+N. Фокус переместится в элемент управления TextBox.
  6. Повторите описанные выше действия для элемента Product label, связав сочетание клавиш ALT+P с элементом управления ComboBox.

    Важная информация

    Выше данные элементов Label были привязаны к элементам TextBox, чтобы обеспечить выбор элемента управления с помощью клавиш доступа. Привязка данных в WPF — одна из самых мощных возможностей платформы, которая широко используется во всех приложениях WPF. Например, привязка элементов интерфейса пользователя к базе данных или данным коллекции и внутриформенные привязки предоставляют возможности взаимодействия пользователям приложения. Использование привязок данных в интерфейсе пользователя избавляет от необходимости написания больших объемов кода, который пришлось бы создавать при разработке на другой платформе.

    Правильное понимание привязок данных WPF — необходимое условие для разработчика на платформе WPF. Документация MSDN содержит четкую и лаконичную информацию (см.https://msdn.microsoft.com/ru-ru/library/ms752347.aspx).

  7. Существует несколько способов добавить элементы в элемент управления типа ComboBox. В этом руководстве в элемент ComboBox будут добавлены три статических элемента.
    • Выберите элемент ComboBox.
    • Выполните поиск строки «items» в окне свойств (см. рис. 18 ниже).
    • Щелкните значок многоточия для свойства Items, чтобы открыть редактор коллекции для свойства Items.

      Рис. 18. Коллекция Items элемента ComboBox

  8. Добавлять элементы с помощью редактора коллекции очень просто.
    • Нажмите кнопку Add («Добавить»).
    • Найдите свойство Content и измените значение.
    • Также можно изменять порядок элементов и удалять элементы.
  9. Добавьте три элемента с помощью редактора коллекции, показанного на рис. 19. Задайте свойству Content следующие строки:
    • Deluxe Photo Paper
    • Financial Calculator
    • 4GB USB Thumb Drive
  10. По завершении нажмите кнопку ОК.
    • В редакторе XAML посмотрите на созданную разметку XAML.

      Рис. 19. Редактор коллекции

Приложение Survey. Элементы управления формы. Часть 2

В этом разделе для отображения переключателей RadioButton будет использоваться элемент GroupBox. Переключатели RadioButton взаимоисключающие, то есть выбор переключателя автоматически отменяет ранее выбранный переключатель.

Также будет использован новый элемент управления панели StackPanel. Он группирует дочерние элементы управления по горизонтали или вертикали в зависимости от значения свойства Orientation.

  1. Ниже в элемент ComboBox добавляется элемент GroupBox с помощью вкладки Controls («Элементы управления») панели элементов.
  2. Элемент управления GroupBox может содержать один дочерний элемент управления. Конструктор WPF автоматически добавляет дочерний элемент управления Grid (см. рис. 20 ниже).
  3. Элемент Grid необходимо заменить на элемент StackPanel. Это можно сделать, либо напрямую изменив разметку XAML, либо с помощью конструктора.
  4. Щелкните внутри элемента GroupBox, чтобы выбрать элемент Grid элемента GroupBox.
    • Нажмите клавишу DELETE, чтобы удалить дочерний элемент Grid.

      Рис. 20. Элемент GroupBox

  5. Чтобы добавить элемент StackPanel в качестве дочернего элемента GroupBox, перетащите элемент управления StackPanel из панели элементов на элемент GroupBox (см. рис. 21 ниже). Обратите внимание на синий декоративный элемент вокруг границы. Он указывает на родительский элемент управления, дочерним элементом которого станет элемент StackPanel, если отпустить его в текущем местоположении.

    Рис. 21. Установление родительской связи элемента управления при создании

  6. При добавлении элементов управления на поверхность разработки с помощью панели элементов некоторым свойствам присваиваются значения по умолчанию.

    Совет.Также можно перетаскивать элементы управления из панели элементов в редактор XAML. При перетаскивании элемента управления в редактор XAML значения по умолчанию свойствам не присваиваются.

    • После создания элемента StackPanel поверхность разработки будет выглядеть, как показано на рис. 22 ниже. Обратите внимание, что в редакторе XAML и структуре документа элемент StackPanel является дочерним элементом GroupBox.

      Рис. 22. Элемент StackPanel является дочерним элементом элемента GroupBox

  7. В данном приложении элемент StackPanel должен автоматически занимать все пространство внутри элемента GroupBox, то есть при изменении размера элемента GroupBox на этапе разработки или во время выполнения элемент StackPanel должен увеличиваться или уменьшаться вместе с элементом GroupBox.
  8. Для выполнения этой задачи воспользуемся окном свойств (см. рис. 23 ниже).
    • Выберите элемент StackPanel и выполните поиск строки «wid» в окне свойств.
    • Щелкните маркер свойства Width («Ширина») и выберите команду Reset Value («Сбросить значение»). Значение свойства Width изменится на Auto («Авто»).

      Рис. 23. Сброс значений свойства

    • Повторите аналогичные действия для свойства Height («Высота»).
    • Выполните поиск строки «align». Сбросьте значения свойств HorizontalAlignment и VerticalAlignment. При сбросе их значения будут изменены на Stretch («Растянуть»). Размер элемента StackPanel будет изменяться автоматически, а элемент будет выглядеть, как на рис. 24.

      Рис. 24. Элемент StackPanel с автоматически изменяемым размером

  9. Присвоим элементу GroupBox содержательный заголовок. В окне свойств выполните поиск строки «head» и измените значение свойства Header на «Value» (см. рис. 25 ниже).
  10. Выберите элемент StackPanel, добавьте три элемента RadioButton в качестве дочерних элементов элемента StackPanel. Трижды сделайте двойной щелчок элемента RadioButton на панели элементов. После этого поверхность разработки будет выглядеть, как показано на рис. 25 ниже.
  11. Конструктор WPF позволяет выбирать несколько элементов управления и изменять значения общих свойств.
  12. Чтобы выбрать три элемента RadioButton, щелкните их, удерживая нажатой клавишу CTRL (CTRL+щелчок). Обратите внимание, что имя окна свойств изменится на Multiple objects selected («Выбрано несколько объектов»).
    • В окне свойств сбросьте значения свойств Height («Высота») и Width («Ширина») для выбранных объектов RadioButton.
    • В окне свойств выполните поиск строки «margin» и задайте значение равным 3.5. В зависимости от размера объекта GroupBox изменение свойства Margin может привести к тому, что один или несколько элементов RadioButton исчезнут из вида. Это проблема будет устранена далее.

      Рис. 25. Изменение свойств нескольких выбранных элементов

      Совет.Также можно выбрать все элементы в контейнере. Для этого следует выбрать контейнер и нажать сочетание клавиш CTRL+A. На рис. 25 выше выберите элемент StackPanel и нажмите сочетание клавиш CTRL+A, чтобы выбрать три элемента RadioButton.

  13. На поверхности разработки выберите элемент GroupBox. С помощью декоративного элемента для изменения размера измените размер элемента GroupBox, чтобы он выглядел, как на рис. 26 ниже.
    • Обратите внимание, что размер дочернего элемента StackPanel меняется автоматически при изменении родительского элемента GroupBox.

      Рис. 26. Изменение размера элемента GroupBox

  14. В окне свойств присвойте свойству Content трех элементов RadioButton следующие значения:
    • Outstanding («Отлично»)
    • Good («Хорошо»)
    • Unsatisfied («Неудовлетворительно»)

      Рис. 27. Свойство Content элемента RadioButton

  15. Элементу ComboBox можно задать значение по умолчанию путем присвоения значения свойству SelectedIndex.
  16. Выберите элемент ComboBox. В окне свойств измените значение свойства SelectedIndex на 0.
    • Обратите внимание, что в элементе ComboBox отображается значение свойства ComboBoxItem с индексом 0 (см. рис. 28 ниже).

      Рис. 28. Свойство SelectedIndex элемента ComboBox

Приложение Survey. Элементы управления формы. Часть 3

Чтобы завершить работу над приложением, необходимо добавить две кнопки и код, который будет выполняться при нажатии кнопок.

  1. Добавьте две кнопки, как показано на рис. 29 ниже.
    • Измените значение свойства Content левой кнопки на OK, а свойству Name присвойте значение btnOK.
    • Измените значение свойства Content правой кнопки на Cancel, а свойству Name присвойте значение btnCancel.
  2. В конструкторе WPF связать код с событием элемента управления можно тремя способами.
    • Двойной щелчок элемента управления приведет к связыванию с событием по умолчанию.
    • На вкладке событий в окне свойств найдите необходимое событие и дважды щелкните область, указанную на рис. 29.
      • Если код события уже есть в коде программной части, можно выбрать имя метода в элементе ComboBox, вместо того чтобы выполнять двойной щелчок для создания нового обработчика событий.
    • Создайте новый обработчик событий или выберите метод с помощью редактора XAML.
  3. Выберите кнопку OK. На вкладке событий в окне свойств дважды щелкните область рядом с событием Click. Обработчик событий Click будет связан, а код будет добавлен в код программной части.

    Рис. 29. Вкладка событий в окне свойств

    • В Visual Basic события связываются с помощью конструкции Handles.
    • В C# событие связывается путем добавления имени события и обработчика событий в разметку XAML.
  4. Дважды щелкните кнопку Cancel на поверхности разработки, чтобы создать обработчик событий для этой кнопки.
    • Добавьте вызовы методов MessageBox.Show и Close в созданные обработчики событий.

      КоднаVisual Basic

      Class Window1

          Private Sub btnCancel_Click(
                  ByVal sender As System.Object,
                  ByVal e As System.Windows.RoutedEventArgs
                  ) Handles btnCancel.Click

              Me.Close()
          End Sub

          Private Sub btnOK_Click(
                  ByVal sender As System.Object,
                  ByVal e As System.Windows.RoutedEventArgs
                  ) Handles btnOK.Click

              MessageBox.Show("Thank you for your feedback")
              Me.Close()
          End Sub

      End Class

      КоднаC#

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Windows;
      using System.Windows.Controls;
      using System.Windows.Data;
      using System.Windows.Documents;
      using System.Windows.Input;
      using System.Windows.Media;
      using System.Windows.Media.Imaging;
      using System.Windows.Navigation;
      using System.Windows.Shapes;

      namespace FirstWPFApplication
      {
          ///
          /// Interaction logic for Window1.xaml
          ///
          public partial class Window1 : Window {
              public Window1() {
                  InitializeComponent();
              }

              private void btnOK_Click(object sender, RoutedEventArgs e) {
                  MessageBox.Show("Thank you for your feedback.");
                  this.Close();
               }

              private void btnCancel_Click(object sender, RoutedEventArgs e) {
                  this.Close();

              }
          }
      }

  5. Чтобы запустить готовое приложение, нажмите клавишу F5.
    • Переместите фокус в элемент TextBox с помощью клавиши доступа ALT+N.
    • Переместите фокус в элемент ComboBox с помощью сочетания клавиш ALT+P.
      • Используйте клавиши со стрелками, чтобы изменить значение элемента ComboBox.
      • Нажмите клавишу F4, чтобы открыть раскрывающийся список в элементе ComboBox.
    • Щелкайте переключатели RadioButton, чтобы убедиться в том, что в любое время выбран только один элемент.
    • Нажатие кнопки Cancel приведет к закрытию приложения.
    • Нажатие кнопки OK приведет к отображению окна сообщения. Закройте окно сообщения, и приложение будет закрыто.

      Рис. 30. Работа приложения