チュートリアル: ユーザー補助対応の Windows ベースのアプリケーションの作成
ユーザー補助に対応するアプリケーションを作成することは、ビジネスに重要な影響を与えます。 多くの政府は、ソフトウェアの購入に関するユーザー補助の規制があります。 Certified for Windows ロゴには、ユーザー補助に関する要件が含まれています。 米国だけでも 3000 万人 (その多くは潜在的な顧客) が、ソフトウェアのアクセシビリティ機能によって影響を受けると推定されています。
このチュートリアルにより、Certified for Windows ロゴの 5 つのユーザー補助機能の要件に対応します。 これらの要件によると、ユーザー補助機能を持つアプリケーションとは、次のようなアプリケーションです。
コントロール パネルのサイズ、色、フォント、および入力設定をサポートします。 ユーザーがコントロール パネルの設定を変更すると、メニュー バー、タイトル バー、罫線、およびステータス バーはすべてサイズが変更されます。 このアプリケーションでは、コントロールまたはコードに追加の変更は必要ありません。
ハイ コントラスト モードをサポートします。
すべての機能に対して文書化されたキーボード アクセスを提供します。
キーボード フォーカスの場所を視覚的およびプログラムで公開します。
サウンドだけで重要な情報を伝達しないようにします。
詳細については、「ユーザー補助アプリケーションのデザイン リソース」を参照してください。
さまざまなキーボード レイアウトをサポートする方法については、「推奨される国際対応アプリケーション開発手順」を参照してください。
プロジェクトの作成
このチュートリアルでは、ピザの注文を受け取るためのアプリケーションのユーザー インターフェイスを作成します。 顧客の名前のための TextBox、ピザのサイズを選択する RadioButton グループ、トッピングを選択するための CheckedListBox、[注文] と [キャンセル] のラベルの付いた 2 つのボタン コントロール、および [終了] コマンドのあるメニューで構成されます。
ユーザーが、顧客の名前、ピザのサイズ、および希望のトッピングを入力します。 ユーザーが [注文] ボタンをクリックすると、メッセージ ボックスに注文の概要と値段が表示され、コントロールがクリアされて次の注文のために準備します。 ユーザーが [キャンセル] ボタンをクリックすると、コントロールがクリアされて、次の注文のための準備ができた状態になります。 ユーザーが [終了] メニュー項目をクリックすると、プログラムを閉じます。
このチュートリアルの重点は、販売注文システムのコードではなく、ユーザー インターフェイスのユーザー補助機能です。 このチュートリアルは、ボタン、オプション ボタン、テキスト ボックス、およびラベルなど、頻繁に使用されるいくつかのコントロールのユーザー補助機能を示します。
アプリケーションの作成を開始するには
- Visual Basic または Visual C# で新しい Windows アプリケーションを作成します。 プロジェクトに PizzaOrder という名前を付けます。 詳細については、「ソリューションとプロジェクトの作成」を参照してください。
フォームへのコントロールの追加
フォームにコントロールを追加するときは、ユーザー補助に対応したアプリケーション作成のガイドラインに従うよう注意してください。
AccessibleDescription プロパティと AccessibleName プロパティを設定します。 この例では、AccessibleRole の既定の設定で十分です。 アクセシビリティのプロパティの詳細については「Windows フォーム上のコントロールのユーザー補助情報の提供」を参照してください。
フォント サイズを 10 ポイント以上に設定します。
注意
開始するときに、フォームのフォント サイズを 10 に設定すると、その後フォームに追加されるすべてのコントロールのフォント サイズが 10 になります。
TextBox コントロールを説明するラベル コントロールが、タブ オーダーで TextBox コントロールのすぐ前になるようにします。
"&" の文字を使用して、ユーザーが移動する先のコントロールの Text プロパティにアクセス キーを追加します。
"&" の文字を使用して、ユーザーが移動する先のコントロールに先行するラベルの Text プロパティにアクセス キーを追加します。 ラベルの UseMnemonic プロパティを
true
に設定し、ユーザーがアクセス キーを押したときに、フォーカスがタブ オーダーで次のコントロールに設定されるようにします。アクセス キーをすべてのメニュー項目に追加します。
Windows アプリケーションをユーザー補助に対応させるには
フォームにコントロールを追加し、以下に示すように、プロパティを設定します。 フォームにコントロールを配置する方法のモデルについては、表の最後の画像を参照してください。
Object プロパティ 値 Form1 AccessibleDescription オーダー フォーム AccessibleName オーダー フォーム フォント サイズ 10 テキスト ピザ オーダー フォーム PictureBox 名前 ロゴ AccessibleDescription ピザのスライス AccessibleName 会社のロゴ Image 任意のアイコンまたはビットマップ Label 名前 companyLabel テキスト おいしいピザ TabIndex 1 AccessibleDescription 会社名 AccessibleName 会社名 背景色 青 前景色 黄 フォント サイズ 18 Label 名前 customerLabel テキスト 名前(&N) TabIndex 2 AccessibleDescription 顧客名のラベル AccessibleName 顧客名のラベル UseMnemonic True TextBox 名前 customerName テキスト (なし) TabIndex 3 AccessibleDescription 顧客名 AccessibleName 顧客名 GroupBox 名前 sizeOptions AccessibleDescription ピザのサイズ オプション AccessibleName ピザのサイズ オプション テキスト ピザのサイズ TabIndex 4 RadioButton 名前 smallPizza テキスト スモール(&S) $6.00 オン True TabIndex 0 AccessibleDescription Small pizza AccessibleName Small pizza RadioButton 名前 largePizza テキスト ラージ(&L) $10.00 TabIndex 1 AccessibleDescription ラージ サイズのピザ AccessibleName ラージ サイズのピザ Label 名前 toppingsLabel テキスト トッピング(&T) (1 つ $0.75) TabIndex 5 AccessibleDescription トッピング ラベル AccessibleName トッピング ラベル UseMnemonic True CheckedListBox 名前 トッピング TabIndex 6 AccessibleDescription 選択可能なトッピング AccessibleName 選択可能なトッピング 項目 ペペロニ、ソーセージ、マッシュルーム ボタン 名前 順序 テキスト 順序(&O) TabIndex 7 AccessibleDescription 注文の合計 AccessibleName 注文の合計 ボタン 名前 cancel テキスト キャンセル(&C) TabIndex 8 AccessibleDescription 注文をキャンセルする AccessibleName 注文をキャンセルする MainMenu 名前 theMainMenu MenuItem 名前 fileCommands テキスト ファイル(&F) MenuItem 名前 exitApp テキスト 終了(&X) フォームは次の図のようになります。
ハイ コントラスト モードのサポート
ハイコントラスト モードとは、視覚的に障碍のあるユーザーの役に立つ対照的な色とフォント サイズを使用して、読みやすさを向上する Windows のシステム設定です。 ハイコントラスト モードが設定されているかどうかを判断するために HighContrast プロパティが用意されています。
SystemInformation.HighContrast が true
の場合、アプリケーションは次のようになります
システムの配色を使用して、すべてのユーザー インターフェイス要素を表示します。
色で伝達される情報を、視覚的手掛かりまたはサウンドで伝達します。 たとえば、特定のリスト項目が赤いフォントを使用して強調表示されている場合に、フォントに太字を追加することで、項目が強調されていることをユーザーが色以外の手掛かりで確認できます。
テキストの背後にあるイメージやパターンを省略します。
アプリケーションが開始し、システム イベント UserPreferenceChanged に応答する際、アプリケーションで HighContrast の設定を確認する必要があります。 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 では機能しません。
その他のツールは、アプリケーションのユーザー補助機能をテストするためにすぐに使用できます。
キーボード フォーカスを公開することをテストするには、拡大鏡を実行します。 (拡大鏡を開くには、[スタート] メニューをクリックし、[すべてのプログラム]、[アクセサリ]、[アクセシビリティ] の順でポイントして、[拡大鏡] をクリックします)。 キーボードの [Tab] キーとマウスの両方を使用して、ユーザー インターフェイスを移動します。 すべての操作が拡大鏡で正常に追跡されることを確認します。
画面要素の公開をテストするには、検査を実行し、マウスと TAB キーの両方を使用して、各要素に到達します。 [検査] ウィンドウの名前、状態、ロール、場所、および値のフィールドに表示される情報が UI 内の各オブジェクトについて、ユーザーにとって意味があることを確認します。
.NET Desktop feedback