次の方法で共有


チュートリアル: アクセシビリティの高い Windows ベースのアプリケーションの作成

アクセス可能なアプリケーションを作成すると、ビジネスに重要な影響があります。 多くの政府には、ソフトウェア購入のアクセシビリティに関する規制があります。 Certified for Windows ロゴには、アクセシビリティ要件が含まれています。 米国の推定3,000万人の居住者(その多くは潜在的な顧客)は、ソフトウェアのアクセシビリティの影響を受けています。

このチュートリアルでは、Certified for Windows ロゴの 5 つのアクセシビリティ要件に対処します。 これらの要件に従って、アクセス可能なアプリケーションは次の操作を行います。

  • コントロール パネルのサイズ、色、フォント、入力設定をサポートします。 ユーザーがコントロール パネルの設定を変更すると、メニュー バー、タイトル バー、罫線、ステータス バーのサイズがすべて変更されます。 このアプリケーションでは、コントロールまたはコードに追加の変更は必要ありません。

  • ハイ コントラスト モードをサポートします。

  • すべての機能に対する文書化されたキーボード アクセスを提供します。

  • キーボード フォーカスの場所を視覚的およびプログラムで公開します。

  • 音だけで重要な情報を伝えるのを避けてください。

詳細については、「アクセス可能なアプリケーションの設計に関するリソース」を参照してください。

さまざまなキーボード レイアウトをサポートする方法については、「World-Ready Applications開発のベスト プラクティス」を参照してください。

プロジェクトの作成

このチュートリアルでは、ピザの注文を受け取るアプリケーションのユーザー インターフェイスを作成します。 これは、顧客の名前の TextBox、ピザのサイズを選択する RadioButton グループ、トッピングを選択するための CheckedListBox、Order と Cancel というラベルの付いた 2 つのボタン コントロール、および Exit コマンドを含むメニューで構成されます。

ユーザーは、顧客の名前、ピザのサイズ、および必要なトッピングを入力します。 ユーザーが [注文] ボタンをクリックすると、注文の概要とそのコストがメッセージ ボックスに表示され、コントロールがクリアされ、次の注文の準備が整います。 ユーザーが [キャンセル] ボタンをクリックすると、コントロールがクリアされ、次の注文の準備が整います。 ユーザーが [終了] メニュー項目をクリックすると、プログラムが閉じます。

このチュートリアルの重点は、小売注文システムのコードではなく、ユーザー インターフェイスのアクセシビリティです。 このチュートリアルでは、ボタン、ラジオ ボタン、テキスト ボックス、ラベルなど、よく使用されるコントロールのアクセシビリティ機能について説明します。

アプリケーションの作成を開始するには

フォームへのコントロールの追加

フォームにコントロールを追加する場合は、アクセス可能なアプリケーションを作成するための次のガイドラインに注意してください。

  • AccessibleDescription プロパティと AccessibleName プロパティを設定します。 この例では、AccessibleRole の既定の設定で十分です。 アクセシビリティ プロパティの詳細については、「Windows フォーム上のコントロールのアクセシビリティ情報を提供する」を参照してください。

  • フォント サイズを 10 ポイント以上に設定します。

    手記

    起動時にフォームのフォント サイズを 10 に設定すると、その後フォームに追加されるすべてのコントロールのフォント サイズは 10 になります。

  • TextBox コントロールを記述する Label コントロールが、タブ オーダーで TextBox コントロールの直前にあることを確認します。

  • "&" 文字を使用して、ユーザーが移動するコントロールの Text プロパティにアクセス キーを追加します。

  • "&" 文字を使用して、ユーザーが移動するコントロールの前にあるラベルの Text プロパティにアクセス キーを追加します。 ラベルの UseMnemonic プロパティを trueに設定すると、ユーザーがアクセス キーを押したときにタブ オーダーで次のコントロールにフォーカスが設定されます。

  • すべてのメニュー項目にアクセス キーを追加します。

Windows アプリケーションにアクセスできるようにするには

  • フォームにコントロールを追加し、以下の説明に従ってプロパティを設定します。 フォーム上でコントロールを配置する方法のモデルについては、表の末尾にある図を参照してください。

    オブジェクト 財産 価値
    Form1 アクセシブル説明 注文フォーム
    アクセシブル名 注文フォーム
    フォント サイズ 10
    テキスト ピザ注文フォーム
    PictureBox 名前 ロゴ
    AccessibleDescription ピザのスライス
    アクセシブルネーム 会社のロゴ
    画像 任意のアイコンまたはビットマップ
    ラベル 名前 会社のラベル
    テキスト 良いピザ
    タブインデックス 1
    アクセシブルディスクリプション 会社名
    アクセシブルネーム 会社名
    背景色 青い
    前景色 黄色
    フォント サイズ 18
    ラベル 名前 顧客ラベル
    テキスト 名前(&N)
    タブインデックス 2
    アクセシブルディスクリプション 顧客名ラベル
    アクセス可能な名前 顧客名ラベル
    UseMnemonic 本当
    テキストボックス 名前 顧客名
    テキスト (なし)
    TabIndex 3
    アクセシブルディスクリプション 顧客名
    アクセシブルネーム 顧客名
    GroupBox 名前 サイズオプション
    アクセシブルな説明 ピザサイズのオプション
    アクセシブル名 ピザサイズのオプション
    テキスト ピザのサイズ
    タブインデックス (TabIndex) 4
    RadioButton 名前 スモールピザ
    テキスト スモール(&S) $6.00
    確認済み 本当
    TabIndex 0
    アクセス可能な説明 小さなピザ
    アクセシブルネーム 小さなピザ
    RadioButton 名前 largePizza
    テキスト ラージ(&L) $10.00
    TabIndex 1
    アクセシブル説明 大きなピザ
    アクセシブルネーム 大きなピザ
    ラベル 名前 toppingsLabel
    テキスト &トッピング (各 0.75 ドル)
    タブインデックス 5
    アクセシブルな説明 トッピング ラベル
    アクセシブルネーム トッピング ラベル
    UseMnemonic 本当
    CheckedListBox 名前 トッピング
    TabIndex(タブインデックス) 6
    アクセシブル説明 使用可能なトッピング
    アクセシブル名 使用可能なトッピング
    項目 ペペロニ, ソーセージ, キノコ
    ボタン 名前 順序
    テキスト 順序(&O)
    タブインデックス 7
    アクセシブルな説明 注文の合計
    アクセシブルネーム 合計注文数
    ボタン 名前 cancel
    テキスト キャンセル(&C)
    TabIndex 8
    アクセシブル説明 注文をキャンセルする
    アクセシブル名 注文の取り消し
    MainMenu 名前 theMainMenu
    メニュー項目 名前 fileCommands
    テキスト ファイル(&F)
    メニュー項目 名前 exitApp
    テキスト 終了(&X)

    フォームは次の図のようになります。

    名前のテキストボックスとサイズとトッピングの選択を含むピザ注文フォーム。

ハイ コントラスト モードのサポート

ハイ コントラスト モードは、視覚的に損なわれるユーザーにとって有益なコントラストの色とフォント サイズを使用して、読みやすさを向上させる 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 プロシージャを呼び出します (Visual Basic ではPublic Sub New()、Visual C# では public Form1())。 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 メソッドにコードを追加して、アプリケーションが閉じたときにイベントを解放します。 Visual Basic で Dispose メソッドにアクセスするには、Windows フォーム デザイナーで生成されたコードというラベルの付いた領域を展開する必要があります。

    手記

    システム イベント コードは、メイン アプリケーションとは別のスレッドを実行します。 イベントを解放しない場合、プログラムが閉じられた後でも、イベントにフックするコードが実行されます。

    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 を使用してタイトル バーをフラッシュします。 Windows API 関数を呼び出す方法の例については、「チュートリアル: Windows APIの呼び出し」を参照してください。

    手記

    ユーザーは、Windows SoundSentry サービスを有効にしている可能性があります。これにより、システムサウンドがコンピューターの内蔵スピーカーを介して再生されたときにウィンドウが点滅します。

  2. ユーザーが応答できるように、重要な情報を非モーダル ウィンドウに表示します。

  3. キーボード フォーカスを取得するメッセージ ボックスを表示します。 ユーザーが入力している可能性がある場合は、このメソッドを使用しないでください。

  4. タスク バーの状態通知領域にステータス インジケーターを表示します。 詳細については、「Windows フォーム NotifyIcon コンポーネントを使用したタスク バーへのアプリケーション アイコンの追加 」を参照してください。

アプリケーションのテスト

アプリケーションをデプロイする前に、実装したアクセシビリティ機能をテストする必要があります。

アクセシビリティ機能をテストするには

  1. キーボード アクセスをテストするには、マウスを取り外し、キーボードのみを使用して各機能のユーザー インターフェイスを移動します。 すべてのタスクがキーボードのみを使用して実行できることを確認します。

  2. ハイ コントラストのサポートをテストするには、コントロール パネルの [アクセシビリティ オプション] アイコンを選択します。 [表示] タブをクリックし、[ハイ コントラストを使用] チェック ボックスをオンにします。 すべてのユーザー インターフェイス要素間を移動して、色とフォントの変更が反映されるようにします。 また、テキストの背後に描画される画像またはパターンが省略されていることを確認します。

    手記

    Windows NT 4 には、コントロール パネルに [アクセシビリティ オプション] アイコンがありません。 したがって、この SystemInformation.HighContrast 設定を変更する手順は、Windows NT 4 では機能しません。

  3. その他のツールは、アプリケーションのアクセシビリティをテストするためにすぐに使用できます。

  4. キーボード フォーカスの公開をテストするには、拡大鏡を実行します。 (開くには、[スタート] メニューをクリックし、[プログラム]をポイントし、[アクセサリ]をポイントし、[アクセシビリティ] ポイントして、[拡大鏡] をクリックします)。 キーボードのタブとマウスの両方を使用して、ユーザー インターフェイス内を移動します。 すべてのナビゲーションが 拡大鏡で正しく追跡されていることを確認します。

  5. 画面要素の公開をテストするには、Inspect を実行し、マウスと TAB キーの両方を使用して各要素に到達します。 [検査] ウィンドウの [名前]、[状態]、[ロール]、[場所]、および [値] フィールドに表示される情報が、UI 内の各オブジェクトについてユーザーにとって意味があることを確認します。