Поделиться через


Пошаговое руководство. Создание приложения на основе Windows со специальными возможностями

Создание приложения со специальными возможностями имеет важные бизнес-последствия. У многих правительств существуют нормы доступности для покупки программного обеспечения. Логотип "Сертифицировано для Windows" включает требования по доступности. По оценкам, 30 миллионов жителей США в одиночку, многие из них потенциальных клиентов, страдают от доступности программного обеспечения.

В этом пошаговом руководстве рассматриваются пять требований специальных возможностей для сертифицированного логотипа Windows. Согласно этим требованиям, доступное приложение будет:

  • Поддержка параметров панели управления, цвета, шрифта и входных данных. Строка меню, строка заголовка, границы и строка состояния будут изменять размер, когда пользователь изменяет параметры панели управления. В этом приложении не требуются дополнительные изменения элементов управления или кода.

  • Поддержка режима высокой контрастности.

  • Предоставьте документированный доступ с клавиатуры для всех функций.

  • Предоставление визуального и программного расположения фокуса клавиатуры.

  • Избегайте передачи важных сведений по звуку в одиночку.

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

Для получения информации о поддержке различных раскладок клавиатуры см. рекомендации по разработке глобально готовых приложений.

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

В этом пошаговом руководстве создается пользовательский интерфейс для приложения, которое принимает заказы на пиццу. Он состоит из TextBox для имени клиента, группы RadioButton для выбора размера пиццы, CheckedListBox для выбора начинок, двух кнопок управления с метками "Заказать" и "Отмена", а также меню с командой "Выход".

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

Акцент этого пошагового руководства — это не код для системы розничного заказа, а специальные возможности пользовательского интерфейса. В пошаговом руководстве показаны специальные возможности нескольких часто используемых элементов управления, включая кнопки, переключатели, текстовые поля и метки.

Начало создания приложения

Добавление элементов управления в форму

При добавлении элементов управления в форму следует учитывать следующие рекомендации, чтобы сделать доступное приложение:

  • Задайте свойства 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 используется для изменения параметров цвета метки на выбранные пользователем системные цвета.

Включение режима высокой контрастности эффективным способом

  1. Создайте метод, чтобы задать цвета метки системным цветам.

    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;
        }
    }
    
  2. Вызовите процедуру 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();
    }
    
  3. Создайте процедуру для обработки события 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();
    }
    
  4. Добавьте код в конструктор формы после вызова 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);
    }
    
  5. Добавьте код в метод формы 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 );
    }
    
  6. Нажмите клавишу F5, чтобы запустить приложение.

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

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

Предоставление информации другими средствами, чем звук

  1. Сделайте заголовок окна мигающим с помощью функции Windows API FlashWindow. Пример вызова функций API Windows см. в пошаговом руководстве. Вызов API Windows.

    Заметка

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

  2. Отображение важных сведений в не модальном окне, чтобы пользователь мог ответить на него.

  3. Отобразите окно сообщения, которое получает фокус клавиатуры. Избегайте этого метода, когда пользователь может вводить текст.

  4. Отображение индикатора состояния в области уведомлений о состоянии панели задач. Дополнительные сведения см. в разделе о добавлении значков приложений на панель задач с помощью компонента NotifyIcon Windows Forms.

Тестирование приложения

Перед развертыванием приложения необходимо протестировать реализованные специальные возможности.

Тестирование функций доступности

  1. Чтобы проверить доступ к клавиатуре, отключите мышь и перейдите к пользовательскому интерфейсу для каждой функции, используя только клавиатуру. Убедитесь, что все задачи могут выполняться только с помощью клавиатуры.

  2. Чтобы проверить поддержку высокой контрастности, щелкните значок параметров специальных возможностей на панели управления. Щелкните вкладку "Отображение" и установите флажок "Использовать высокую контрастность". Перейдите по всем элементам пользовательского интерфейса, чтобы убедиться, что изменения цвета и шрифта отражаются. Кроме того, убедитесь, что изображения или шаблоны, рисуемые за текстом, опущены.

    Заметка

    Windows NT 4 не имеет значка параметров специальных возможностей на панели управления. Таким образом, эта процедура изменения параметра SystemInformation.HighContrast не работает в Windows NT 4.

  3. Другие средства легко доступны для тестирования специальных возможностей приложения.

  4. Чтобы проверить отображение фокуса клавиатуры, запустите Лупу. (Чтобы открыть его, щелкните меню «Пуск», наведите указатель на Программы, наведите указатель на Аксессуары, наведите указатель на Специальные возможности, а затем щелкните Лупа). Навигация по пользовательскому интерфейсу с помощью вкладок клавиатуры и мыши. Убедитесь, что вся навигация правильно отслеживается в магнифайере .

  5. Чтобы проверить отображение элементов экрана, выполните проверку и используйте мышь и клавишу TAB для доступа к каждому элементу. Убедитесь, что информация, представленная в полях "Имя", "Состояние", "Роль", "Расположение" и "Значение" окна "Проверка", имеет смысл для пользователя для каждого объекта в пользовательском интерфейсе.