チュートリアル: アクセシビリティの高い Windows ベースのアプリケーションの作成
アクセス可能なアプリケーションを作成すると、ビジネスに重要な影響があります。 多くの政府には、ソフトウェア購入のアクセシビリティに関する規制があります。 Certified for Windows ロゴには、アクセシビリティ要件が含まれています。 米国の推定3,000万人の居住者(その多くは潜在的な顧客)は、ソフトウェアのアクセシビリティの影響を受けています。
このチュートリアルでは、Certified for Windows ロゴの 5 つのアクセシビリティ要件に対処します。 これらの要件に従って、アクセス可能なアプリケーションは次の操作を行います。
コントロール パネルのサイズ、色、フォント、入力設定をサポートします。 ユーザーがコントロール パネルの設定を変更すると、メニュー バー、タイトル バー、罫線、ステータス バーのサイズがすべて変更されます。 このアプリケーションでは、コントロールまたはコードに追加の変更は必要ありません。
ハイ コントラスト モードをサポートします。
すべての機能に対する文書化されたキーボード アクセスを提供します。
キーボード フォーカスの場所を視覚的およびプログラムで公開します。
音だけで重要な情報を伝えるのを避けてください。
詳細については、「アクセス可能なアプリケーションの設計に関するリソース」を参照してください。
さまざまなキーボード レイアウトをサポートする方法については、「World-Ready Applications開発のベスト プラクティス」を参照してください。
プロジェクトの作成
このチュートリアルでは、ピザの注文を受け取るアプリケーションのユーザー インターフェイスを作成します。 これは、顧客の名前の TextBox、ピザのサイズを選択する RadioButton グループ、トッピングを選択するための CheckedListBox、Order と Cancel というラベルの付いた 2 つのボタン コントロール、および Exit コマンドを含むメニューで構成されます。
ユーザーは、顧客の名前、ピザのサイズ、および必要なトッピングを入力します。 ユーザーが [注文] ボタンをクリックすると、注文の概要とそのコストがメッセージ ボックスに表示され、コントロールがクリアされ、次の注文の準備が整います。 ユーザーが [キャンセル] ボタンをクリックすると、コントロールがクリアされ、次の注文の準備が整います。 ユーザーが [終了] メニュー項目をクリックすると、プログラムが閉じます。
このチュートリアルの重点は、小売注文システムのコードではなく、ユーザー インターフェイスのアクセシビリティです。 このチュートリアルでは、ボタン、ラジオ ボタン、テキスト ボックス、ラベルなど、よく使用されるコントロールのアクセシビリティ機能について説明します。
アプリケーションの作成を開始するには
- Visual Basic または Visual C# で新しい Windows アプリケーションを作成します。 プロジェクトに PizzaOrder
名前を付けます。 詳細については、「新しいソリューションとプロジェクトの作成」を参照してください。
フォームへのコントロールの追加
フォームにコントロールを追加する場合は、アクセス可能なアプリケーションを作成するための次のガイドラインに注意してください。
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 クラスは、ラベルの色設定をユーザーが選択したシステムの色に変更するために使用されます。
効果的な方法でハイ コントラスト モードを有効にするには
ラベルの色をシステムの色に設定するメソッドを作成します。
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
プロシージャを呼び出します (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(); }
適切なシグネチャを持つイベント プロシージャを作成して、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 メソッドにコードを追加して、アプリケーションが閉じたときにイベントを解放します。 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 ); }
F5 キーを押してアプリケーションを実行します。
音以外の手段で重要な情報を伝える
このアプリケーションでは、音だけで情報が伝わるのは一切ありません。 アプリケーションでサウンドを使用する場合は、他の方法でも情報を提供する必要があります。
音以外の手段で情報を提供するため
Windows API 関数 FlashWindow を使用してタイトル バーをフラッシュします。 Windows API 関数を呼び出す方法の例については、「チュートリアル: Windows APIの呼び出し」を参照してください。
手記
ユーザーは、Windows SoundSentry サービスを有効にしている可能性があります。これにより、システムサウンドがコンピューターの内蔵スピーカーを介して再生されたときにウィンドウが点滅します。
ユーザーが応答できるように、重要な情報を非モーダル ウィンドウに表示します。
キーボード フォーカスを取得するメッセージ ボックスを表示します。 ユーザーが入力している可能性がある場合は、このメソッドを使用しないでください。
タスク バーの状態通知領域にステータス インジケーターを表示します。 詳細については、「Windows フォーム NotifyIcon コンポーネントを使用したタスク バーへのアプリケーション アイコンの追加
」を参照してください。
アプリケーションのテスト
アプリケーションをデプロイする前に、実装したアクセシビリティ機能をテストする必要があります。
アクセシビリティ機能をテストするには
キーボード アクセスをテストするには、マウスを取り外し、キーボードのみを使用して各機能のユーザー インターフェイスを移動します。 すべてのタスクがキーボードのみを使用して実行できることを確認します。
ハイ コントラストのサポートをテストするには、コントロール パネルの [アクセシビリティ オプション] アイコンを選択します。 [表示] タブをクリックし、[ハイ コントラストを使用] チェック ボックスをオンにします。 すべてのユーザー インターフェイス要素間を移動して、色とフォントの変更が反映されるようにします。 また、テキストの背後に描画される画像またはパターンが省略されていることを確認します。
手記
Windows NT 4 には、コントロール パネルに [アクセシビリティ オプション] アイコンがありません。 したがって、この SystemInformation.HighContrast 設定を変更する手順は、Windows NT 4 では機能しません。
その他のツールは、アプリケーションのアクセシビリティをテストするためにすぐに使用できます。
キーボード フォーカスの公開をテストするには、拡大鏡を実行します。 (開くには、[
スタート] メニューをクリックし、[プログラム] をポイントし、[アクセサリ]をポイントし、[アクセシビリティ] ポイントして、[拡大鏡 ] をクリックします)。 キーボードのタブとマウスの両方を使用して、ユーザー インターフェイス内を移動します。 すべてのナビゲーションが 拡大鏡で正しく追跡されていることを確認します。 画面要素の公開をテストするには、Inspect を実行し、マウスと TAB キーの両方を使用して各要素に到達します。 [検査] ウィンドウの [名前]、[状態]、[ロール]、[場所]、および [値] フィールドに表示される情報が、UI 内の各オブジェクトについてユーザーにとって意味があることを確認します。
.NET Desktop feedback