Пошаговое руководство. Создание приложения на основе Windows со специальными возможностями
Создание приложения со специальными возможностями имеет важные бизнес-последствия. У многих правительств существуют нормы доступности для покупки программного обеспечения. Логотип "Сертифицировано для Windows" включает требования по доступности. По оценкам, 30 миллионов жителей США в одиночку, многие из них потенциальных клиентов, страдают от доступности программного обеспечения.
В этом пошаговом руководстве рассматриваются пять требований специальных возможностей для сертифицированного логотипа Windows. Согласно этим требованиям, доступное приложение будет:
Поддержка параметров панели управления, цвета, шрифта и входных данных. Строка меню, строка заголовка, границы и строка состояния будут изменять размер, когда пользователь изменяет параметры панели управления. В этом приложении не требуются дополнительные изменения элементов управления или кода.
Поддержка режима высокой контрастности.
Предоставьте документированный доступ с клавиатуры для всех функций.
Предоставление визуального и программного расположения фокуса клавиатуры.
Избегайте передачи важных сведений по звуку в одиночку.
Дополнительные сведения см. в разделе Ресурсы для разработки доступных приложений.
Для получения информации о поддержке различных раскладок клавиатуры см. рекомендации по разработке глобально готовых приложений.
Создание проекта
В этом пошаговом руководстве создается пользовательский интерфейс для приложения, которое принимает заказы на пиццу. Он состоит из TextBox для имени клиента, группы RadioButton для выбора размера пиццы, CheckedListBox для выбора начинок, двух кнопок управления с метками "Заказать" и "Отмена", а также меню с командой "Выход".
Пользователь вводит имя клиента, размер пиццы и нужные начинки. Когда пользователь нажимает кнопку "Заказ", сводка по заказу и его затратам отображается в окне сообщения, а элементы управления очищаются и готовы к следующему заказу. Когда пользователь нажимает кнопку "Отмена", элементы управления очищаются и готовы к следующему заказу. Когда пользователь нажимает пункт меню "Выход", программа закрывается.
Акцент этого пошагового руководства — это не код для системы розничного заказа, а специальные возможности пользовательского интерфейса. В пошаговом руководстве показаны специальные возможности нескольких часто используемых элементов управления, включая кнопки, переключатели, текстовые поля и метки.
Начало создания приложения
- Создайте новое приложение Windows в Visual Basic или Visual C#. Назовите проект PizzaOrder. Для получения более подробной информации см. раздел "Создание новых решений и проектов".
Добавление элементов управления в форму
При добавлении элементов управления в форму следует учитывать следующие рекомендации, чтобы сделать доступное приложение:
Задайте свойства AccessibleDescription и AccessibleName. В этом примере достаточно параметра по умолчанию для AccessibleRole. Для получения дополнительной информации о свойствах доступности см. предоставление сведений о доступности для элементов управления на форме Windows.
Задайте размер шрифта в 10 точек или больше.
Заметка
Если при запуске задать размер шрифта формы равным 10, то все элементы управления, добавленные в форму, будут иметь размер шрифта 10.
Убедитесь, что любой элемент управления Label, описывающий элемент управления TextBox, сразу перед элементом управления TextBox в порядке вкладок.
Добавьте ключ доступа с помощью символа "&" в свойство Text любого элемента управления, к которому пользователь может перейти.
Добавьте ключ доступа с помощью символа "&" в свойство Text метки, которая предшествует элементу управления, к которому пользователь может перейти. Задайте для свойства UseMnemonic меток значение
true
, чтобы фокус был установлен на следующий элемент управления в порядке табуляции, когда пользователь нажимает клавишу доступа.Добавьте ключи доступа ко всем элементам меню.
Чтобы сделать приложение Windows доступным
Добавьте элементы управления в форму и задайте свойства, как описано ниже. См. рисунок в конце таблицы для модели того, как упорядочить элементы управления в форме.
Объект Свойство Ценность Форма1 ДоступноеОписание Форма заказа ДоступноеИмя Форма заказа Размер шрифта 10 Текст Форма заказа пиццы PictureBox Имя лого ОписаниеДоступности Кусок пиццы ИмяДоступа Логотип компании Образ Любой значок или растровое изображение Ярлык Имя метка компании Текст Хорошая пицца TabIndex 1 Описание доступности Название компании Имя для доступа Название компании Цвет фона Синий Цвет переднего плана Жёлтый Размер шрифта 18 Ярлык Имя метка клиента Текст &имя TabIndex 2 Описание доступности Метка имени клиента ДоступноеИмя Метка имени клиента UseMnemonic Правда Текстовое поле Имя ИмяКлиента Текст (нет) TabIndex 3 Описание доступности Имя клиента ИмяДоступности Имя клиента GroupBox Имя варианты размера Описание доступности Параметры размера пиццы ДоступноеИмя Параметры размера пиццы Текст Размер пиццы TabIndex 4 RadioButton Имя smallPizza Текст &Небольшой 6,00 долл. Проверено Правда TabIndex 0 Описание доступности Небольшая пицца ДоступноеИмя Небольшая пицца RadioButton Имя largePizza Текст &большой $ 10,00 TabIndex 1 Доступное описание Большая пицца ДоступноеИмя Большая пицца Ярлык Имя toppingsLabel Текст &Начинки ($ 0,75 за каждую) TabIndex 5 ДоступноеОписание Этикетка топпингов ДоступноеИмя Этикетка топпингов UseMnemonic Правда CheckedListBox Имя Начинки TabIndex 6 Описание доступности Доступные начинки Имя для доступа Доступные начинки Элементы Пепперони, Колбаса, Грибы Кнопка Имя заказ Текст порядок & TabIndex 7 ДоступноеОписание Подведите итог заказа ДоступноеИмя Общий порядок Кнопка Имя Отмена Текст &Отмена TabIndex 8 Описание Доступности Отмена заказа ДоступноеИмя Отмена заказа Главное меню Имя TheMainMenu ЭлементМеню Имя fileCommands Текст файл & пункт меню Имя выход из приложения Текст E&выход Форма будет выглядеть примерно так:
Поддержка режима высокой контрастности
Режим высокой контрастности — это системный параметр Windows, который улучшает удобочитаемость с помощью контрастных цветов и размеров шрифтов, которые полезны для пользователей с нарушениями зрения. Свойство HighContrast предоставляется для определения того, задан ли режим высокой контрастности.
Если SystemInformation.HighContrast равно true
, приложение должно:
Отображение всех элементов пользовательского интерфейса с помощью системной цветовой схемы
Передавайте с помощью визуальных подсказок или звуков любую информацию, передаваемую через цвет. Например, если определенные элементы списка выделены с помощью красного шрифта, вы также можете добавить полужирный шрифт, чтобы пользователь получил подсказку без использования цвета о том, что элементы выделены.
Опустить любые изображения или шаблоны за текстом
Приложение должно проверить параметр HighContrast при запуске приложения и ответить на системное событие UserPreferenceChanged. Событие UserPreferenceChanged возникает при изменении значения HighContrast.
В нашем приложении единственным элементом, который не использует системные параметры цвета, является lblCompanyName
. Класс SystemColors используется для изменения параметров цвета метки на выбранные пользователем системные цвета.
Включение режима высокой контрастности эффективным способом
Создайте метод, чтобы задать цвета метки системным цветам.
Private Sub SetColorScheme() If SystemInformation.HighContrast Then companyLabel.BackColor = SystemColors.Window companyLabel.ForeColor = SystemColors.WindowText Else companyLabel.BackColor = Color.Blue companyLabel.ForeColor = Color.Yellow End If End Sub
private void SetColorScheme() { if (SystemInformation.HighContrast) { companyLabel.BackColor = SystemColors.Window; companyLabel.ForeColor = SystemColors.WindowText; } else { companyLabel.BackColor = Color.Blue; companyLabel.ForeColor = Color.Yellow; } }
Вызовите процедуру
SetColorScheme
в конструкторе форм (Public Sub New()
в Visual Basic иpublic Form1()
в Visual C#). Чтобы получить доступ к конструктору в Visual Basic, необходимо развернуть регион, помеченный как код, созданный конструктором форм Windows.Public Sub New() MyBase.New() InitializeComponent() SetColorScheme() End Sub
public Form1() { InitializeComponent(); SetColorScheme(); }
Создайте процедуру для обработки события UserPreferenceChanged с соответствующей подписью.
Protected Sub UserPreferenceChanged(sender As Object, _ e As Microsoft.Win32.UserPreferenceChangedEventArgs) SetColorScheme() End Sub
public void UserPreferenceChanged(object sender, Microsoft.Win32.UserPreferenceChangedEventArgs e) { SetColorScheme(); }
Добавьте код в конструктор формы после вызова
InitializeComponents
, чтобы подключить процедуру события к системном событию. Этот метод вызывает процедуруSetColorScheme
.Public Sub New() MyBase.New() InitializeComponent() SetColorScheme() AddHandler Microsoft.Win32.SystemEvents.UserPreferenceChanged, _ AddressOf Me.UserPreferenceChanged End Sub
public Form1() { InitializeComponent(); SetColorScheme(); Microsoft.Win32.SystemEvents.UserPreferenceChanged += new Microsoft.Win32.UserPreferenceChangedEventHandler( this.UserPreferenceChanged); }
Добавьте код в метод формы Dispose перед вызовом метода Dispose базового класса, чтобы освободить событие при закрытии приложения. Чтобы получить доступ к методу Dispose в Visual Basic, вам нужно развернуть область, помеченную как сгенерированный конструктором Windows Forms код.
Заметка
Код системного события запускает поток отдельно от основного приложения. Если событие не выпущено, код, который вы подключили к событию, будет выполняться даже после закрытия программы.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing AndAlso components IsNot Nothing Then components.Dispose() End If RemoveHandler Microsoft.Win32.SystemEvents.UserPreferenceChanged, _ AddressOf Me.UserPreferenceChanged MyBase.Dispose(disposing) End Sub
protected override void Dispose(bool disposing) { if(disposing && components != null) { components.Dispose(); } Microsoft.Win32.SystemEvents.UserPreferenceChanged -= new Microsoft.Win32.UserPreferenceChangedEventHandler( this.UserPreferenceChanged); base.Dispose( disposing ); }
Нажмите клавишу F5, чтобы запустить приложение.
Передача важных сведений с помощью других средств, отличных от звука
В этом приложении ни одна информация не передается звуком. Если вы используете звук в приложении, вы также должны предоставить информацию другими средствами.
Предоставление информации другими средствами, чем звук
Сделайте заголовок окна мигающим с помощью функции Windows API FlashWindow. Пример вызова функций API Windows см. в пошаговом руководстве. Вызов API Windows.
Заметка
У пользователя может быть включена служба Windows SoundSentry, из-за чего окно будет мигать, когда системные звуки воспроизводятся через встроенный динамик компьютера.
Отображение важных сведений в не модальном окне, чтобы пользователь мог ответить на него.
Отобразите окно сообщения, которое получает фокус клавиатуры. Избегайте этого метода, когда пользователь может вводить текст.
Отображение индикатора состояния в области уведомлений о состоянии панели задач. Дополнительные сведения см. в разделе о добавлении значков приложений на панель задач с помощью компонента NotifyIcon Windows Forms.
Тестирование приложения
Перед развертыванием приложения необходимо протестировать реализованные специальные возможности.
Тестирование функций доступности
Чтобы проверить доступ к клавиатуре, отключите мышь и перейдите к пользовательскому интерфейсу для каждой функции, используя только клавиатуру. Убедитесь, что все задачи могут выполняться только с помощью клавиатуры.
Чтобы проверить поддержку высокой контрастности, щелкните значок параметров специальных возможностей на панели управления. Щелкните вкладку "Отображение" и установите флажок "Использовать высокую контрастность". Перейдите по всем элементам пользовательского интерфейса, чтобы убедиться, что изменения цвета и шрифта отражаются. Кроме того, убедитесь, что изображения или шаблоны, рисуемые за текстом, опущены.
Заметка
Windows NT 4 не имеет значка параметров специальных возможностей на панели управления. Таким образом, эта процедура изменения параметра SystemInformation.HighContrast не работает в Windows NT 4.
Другие средства легко доступны для тестирования специальных возможностей приложения.
Чтобы проверить отображение фокуса клавиатуры, запустите Лупу. (Чтобы открыть его, щелкните меню «Пуск», наведите указатель на Программы, наведите указатель на Аксессуары, наведите указатель на Специальные возможности, а затем щелкните Лупа). Навигация по пользовательскому интерфейсу с помощью вкладок клавиатуры и мыши. Убедитесь, что вся навигация правильно отслеживается в магнифайере .
Чтобы проверить отображение элементов экрана, выполните проверку и используйте мышь и клавишу TAB для доступа к каждому элементу. Убедитесь, что информация, представленная в полях "Имя", "Состояние", "Роль", "Расположение" и "Значение" окна "Проверка", имеет смысл для пользователя для каждого объекта в пользовательском интерфейсе.
.NET Desktop feedback