チュートリアル : ユーザー補助対応の Windows ベースのアプリケーションの作成
更新 : 2007 年 11 月
ユーザー補助対応のアプリケーションを作成することは、ビジネスの点からみても重要な意味があります。米国を含む多くの国には、アプリケーションにユーザー補助機能を義務付けている法律があります。また、Windows ロゴ プログラムにもユーザー補助の要件があります。ソフトウェアのユーザー補助を必要とするユーザーの数は米国だけでも 3,000 万人と推定され、その多くが今後顧客となる可能性があります。
このチュートリアルでは、Windows ロゴ プログラムのユーザー補助に関する 5 つの要件について説明します。ユーザー補助機能の要件は以下のとおりです。
コントロール パネルのサイズ、色、フォント、入力の各設定をサポートする。ユーザーがコントロール パネルの設定を変更すると、メニュー バー、タイトル バー、境界線、およびステータス バーのサイズが自動的に変更されます。このアプリケーションでは、コントロールやコードに対する追加の変更は必要ありません。
ハイコントラスト モードをサポートする。
すべての機能への公開されたキーボード アクセスが用意されている。
キーボード フォーカスの位置が視覚的に示され、プログラムで公開されている。
重要な情報をサウンドだけで伝達しない。
詳細については、「ユーザー補助アプリケーションのデザイン リソース」、MSDN オンラインの Certified for Windows プログラム Web ページ (https://www.microsoft.com/japan/msdn/certification/default.asp)、および Designed for Windows XP ロゴ プログラム Web ページ (https://go.microsoft.com/fwlink/?linkid=9775) を参照してください。
キーボード レイアウトの変更をサポートする方法については、「推奨される国際対応アプリケーション開発手順」を参照してください。
プロジェクトの作成
このチュートリアルでは、ピザの注文を受け付けるアプリケーションのユーザー インターフェイスを作成します。このインターフェイスは、顧客の名前を入力する TextBox、ピザのサイズを選択する RadioButton グループ、トッピングを選択する CheckedListBox、[注文] と [キャンセル] というラベルの付いた 2 つの Button コントロール、および [終了] コマンドを含む Menu で構成されます。
ユーザーは、顧客の名前、ピザのサイズ、および希望のトッピングを入力します。ユーザーが [注文] をクリックすると、メッセージ ボックスに注文内容の一覧と価格が表示され、コントロールに入力した内容は消去されて次の注文を受け付ける状態になります。ユーザーが [キャンセル] をクリックすると、コントロールに入力した内容は消去されて次の注文を受け付ける状態になります。ユーザーが [終了] をクリックすると、プログラムは終了します。
このチュートリアルは、小売り注文システムのコードではなく、ユーザー インターフェイスのユーザー補助に重点を置いています。このチュートリアルでは、ボタン、オプション ボタン、テキスト ボックス、ラベルなど、頻繁に使用されるコントロールのユーザー補助機能について例を示しながら説明します。
アプリケーションの作成を開始するには
- Visual Basic、Visual C#、または Visual J# で新しい Windows アプリケーションを作成します。プロジェクトの名前は PizzaOrder にします。詳細については、「ソリューションおよびプロジェクトの新規作成」を参照してください。
フォームへのコントロールの追加
フォームにコントロールを追加するときには、ユーザー補助アプリケーションの作成に関する次のガイドラインを考慮してください。
AccessibleDescription プロパティおよび AccessibleName プロパティを設定します。この例では、AccessibleRole の設定を Default にしておきます。ユーザー補助プロパティの詳細については、「Windows フォーム上のコントロールのユーザー補助情報の提供」を参照してください。
フォント サイズを 10 ポイント以上に設定します。
メモ : メモ 起動時にフォームのフォント サイズを 10 に設定した場合、それ以降フォームに追加されるすべてのコントロールのフォント サイズが 10 になります。
TextBox コントロールを説明する Label コントロールのタブ オーダーが、TextBox コントロールの直前になるようにします。
ユーザーが使用する可能性のあるコントロールの Text プロパティに、"&" 文字を使用してアクセス キーを追加します。
ユーザーが使用する可能性のあるコントロールの直前にあるラベルの Text プロパティに、文字 "&" を使用してアクセス キーを追加します。ラベルの UseMnemonic プロパティを true に設定して、ユーザーがアクセス キーを押すとフォーカスがタブ オーダーの次のコントロールに移動するようにします。
すべてのメニュー項目にアクセス キーを追加します。
Windows アプリケーションをユーザー補助対応にするには
フォームにコントロールを追加し、次のようにプロパティを設定します。表の後にある図に、フォーム上でどのようにコントロールを配置するかのモデルを示します。
オブジェクト
プロパティ
値
Form1
AccessibleDescription
Order form
AccessibleName
Order form
Font Size
10
Text
ピザ注文書
PictureBox
Name
logo
AccessibleDescription
A slice of pizza.
AccessibleName
Company logo
Image
任意のアイコンまたはビットマップ
ラベル
Name
companyLabel
Text
Good Pizza
TabIndex
1
AccessibleDescription
Company name
AccessibleName
Company name
Backcolor
Blue
Forecolor
Yellow
Font size
18
ラベル
Name
customerLabel
Text
名前(&N)
TabIndex
2
AccessibleDescription
Customer name label
AccessibleName
Customer name label
UseMnemonic
True
TextBox
Name
customerName
Text
(なし)
TabIndex
3
AccessibleDescription
Customer name
AccessibleName
Customer name
GroupBox
Name
sizeOptions
AccessibleDescription
Pizza size options
AccessibleName
Pizza size options
Text
サイズ
TabIndex
4
RadioButton
Name
smallPizza
Text
スモール $6.00 (&S)
Checked
True
TabIndex
0
AccessibleDescription
Small pizza
AccessibleName
Small pizza
RadioButton
Name
largePizza
Text
ラージ $10.00 (&L)
TabIndex
1
AccessibleDescription
Large pizza
AccessibleName
Large pizza
ラベル
Name
toppingsLabel
Text
トッピング ($0.75/1 種類) (&T)
TabIndex
5
AccessibleDescription
Toppings label
AccessibleName
Toppings label
UseMnemonic
True
CheckedListBox
Name
toppings
TabIndex
6
AccessibleDescription
Available toppings
AccessibleName
Available toppings
Items
ペペロニ、ソーセージ、マッシュルーム
ボタン
Name
order
Text
注文(&O)
TabIndex
7
AccessibleDescription
Total the order
AccessibleName
Total order
ボタン
Name
cancel
Text
キャンセル(&C)
TabIndex
8
AccessibleDescription
Cancel the order
AccessibleName
Cancel order
MainMenu
Name
theMainMenu
MenuItem
Name
fileCommands
Text
ファイル(&F)
MenuItem
Name
exitApp
Text
終了(&X)
フォームの外観は次のようになります。
ハイコントラスト モードのサポート
ハイコントラスト モードは、視覚に障害を持つユーザーのために、色とフォント サイズのコントラストを強めて見やすさを向上させる Windows のシステム設定です。ハイコントラスト モードを設定するかどうかは、SystemInformation.HighContrast プロパティを使用して決定します。
SystemInformation.HighContrast が true の場合、アプリケーションは次のように動作します。
すべてのユーザー インターフェイス要素をシステムの配色で表示します。
色によって伝達される情報を色以外の視覚的な手掛かりまたはサウンドを使って伝達します。たとえば、一覧の中で特定の項目が赤いフォントで強調表示されている場合は、フォントに太字を追加して、項目が強調表示されていることを色以外の手掛かりでユーザーに知らせることができます。
テキストの後ろにあるイメージやパターンは削除します。
アプリケーションは、起動時に HighContrast の設定を確認し、システム イベント UserPreferenceChanged に応答する必要があります。HighContrast の値が変更されると、UserPreferenceChanged イベントが発生します。
このチュートリアルで取り上げているアプリケーションでは、色に対してシステム設定を使用していない要素は lblCompanyName だけです。ラベルの色設定をユーザーが選択したシステム カラーに変更するには、SystemColors クラスを使用します。
ハイコントラスト モードを効果的に有効にするには
ラベルの色をシステム カラーに設定するメソッドを作成します。
' Visual Basic 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 // C# private void SetColorScheme() { if (SystemInformation.HighContrast) { companyLabel.BackColor = SystemColors.Window; companyLabel.ForeColor = SystemColors.WindowText; } else { companyLabel.BackColor = Color.Blue; companyLabel.ForeColor = Color.Yellow; } } // Visual J# private void SetColorScheme() { if (SystemInformation.get_HighContrast()) { companyLabel.set_BackColor(SystemColors.get_Window()); companyLabel.set_ForeColor(SystemColors.get_WindowText()); } else { companyLabel.set_BackColor(Color.get_Blue()); companyLabel.set_ForeColor(Color.get_Yellow()); } }
フォーム コンストラクタ (Visual Basic では Public Sub New() 、Visual C# では public class Form1 、Visual J# では Public Form1) で SetColorScheme プロシージャを呼び出します。Visual Basic でコンストラクタにアクセスするには、[Windows フォーム デザイナで生成されたコード] というラベルの付いた領域を展開する必要があります。
' Visual Basic Public Sub New() MyBase.New() InitializeComponent() SetColorScheme() End Sub // C# public Form1() { InitializeComponent(); SetColorScheme(); } // Visual J# public Form1() { InitializeComponent(); SetColorScheme(); }
適切なシグネチャを使用して、UserPreferenceChanged イベントに応答するイベント プロシージャを作成します。
' Visual Basic Protected Sub UserPreferenceChanged(ByVal sender As Object, _ ByVal e As Microsoft.Win32.UserPreferenceChangedEventArgs) SetColorScheme() End Sub // C# public void UserPreferenceChanged(object sender, Microsoft.Win32.UserPreferenceChangedEventArgs e) { SetColorScheme(); } // Visual J# public void UserPreferenceChanged(Object sender, Microsoft.Win32.UserPreferenceChangedEventArgs e) { SetColorScheme(); }
フォーム コンストラクタで、InitializeComponents の呼び出しの後に、イベント プロシージャをシステム イベントにフックするコードを追加します。このメソッドは、SetColorScheme プロシージャを呼び出します。
' Visual Basic Public Sub New() MyBase.New() InitializeComponent() SetColorScheme() AddHandler Microsoft.Win32.SystemEvents.UserPreferenceChanged, _ AddressOf Me.UserPreferenceChanged End Sub // C# public Form1() { InitializeComponent(); SetColorScheme(); Microsoft.Win32.SystemEvents.UserPreferenceChanged += new Microsoft.Win32.UserPreferenceChangedEventHandler( this.UserPreferenceChanged); } // Visual J# public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); SetColorScheme(); Microsoft.Win32.SystemEvents.add_UserPreferenceChanged( new Microsoft.Win32.UserPreferenceChangedEventHandler(this.UserPreferenceChanged)); // // Add any constructor code after InitializeComponent call // }
フォームの Dispose メソッドで、基本クラスの Dispose メソッドの呼び出しの前に、アプリケーションの終了時にイベントを解放するコードを追加します。Visual Basic で Dispose メソッドにアクセスするには、[Windows フォーム デザイナで生成されたコード] というラベルの付いた領域を展開する必要があります。
メモ : メモ システム イベント コードは、メイン アプリケーションとは別のスレッドを実行します。イベントを解放しないと、イベントにフックしたコードがプログラムの終了後も動作し続けます。
' Visual Basic Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If RemoveHandler Microsoft.Win32.SystemEvents.UserPreferenceChanged, _ AddressOf Me.UserPreferenceChanged MyBase.Dispose(disposing) End Sub // C# protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } Microsoft.Win32.SystemEvents.UserPreferenceChanged -= new Microsoft.Win32.UserPreferenceChangedEventHandler( this.UserPreferenceChanged); base.Dispose( disposing ); } // Visual J# protected void Dispose(boolean disposing) { if (disposing) { if (components != null) { components.Dispose(); } } Microsoft.Win32.SystemEvents.remove_UserPreferenceChanged( new Microsoft.Win32.UserPreferenceChangedEventHandler( this.UserPreferenceChanged)); super.Dispose(disposing); }
F5 キーを押してアプリケーションを実行します。
サウンド以外の手段による重要な情報の伝達
このアプリケーションには、サウンドだけで伝達される情報はありません。アプリケーションでサウンドを使用する場合は、同じ情報を他の手段でも提供する必要があります。
サウンド以外の手段で情報を伝達するには
Windows API 関数 FlashWindow を使用してタイトル バーを点滅させます。Windows API 関数を呼び出す方法の例については、「チュートリアル : Windows API の呼び出し」を参照してください。
メモ : メモ ユーザーが Windows の SoundSentry サービスを有効にしている場合は、コンピュータの内蔵スピーカーを通じてシステム サウンドが再生されると、ウィンドウが点滅します。
重要な情報はモーダルでないウィンドウで表示し、ユーザーがそれに応答できるようにします。詳細については、「Windows フォームのモーダルおよびモードレスでの表示」を参照してください。
キーボード フォーカスを取得するメッセージ ボックスを表示します。ユーザーが文字を入力している可能性がある場合は、この方法を使わないでください。
タスク バーのステータス通知領域にステータス インジケータを表示します。詳細については、「Windows フォームの NotifyIcon コンポーネントによるタスクバーへのアプリケーション アイコンの追加」を参照してください。
アプリケーションのテスト
アプリケーションを配置する前に、実装したユーザー補助機能をテストします。
ユーザー補助機能をテストするには
キーボード アクセスをテストするには、マウスを取り外し、キーボードだけを使用してユーザー インターフェイスの各機能にアクセスを試みます。すべてのタスクをキーボードだけで実行できることを確認します。
ハイコントラストのサポートをテストするには、コントロール パネルの [ユーザー補助のオプション] アイコンをダブルクリックします。[画面] タブをクリックし、[ハイコントラストを使う] チェック ボックスをオンにします。ユーザー インターフェイスのすべての要素について、色とフォントの変更が反映されていることを確認します。また、テキストの後ろにイメージやパターンが表示されていないことを確認します。
メモ : メモ Windows NT 4 のコントロール パネルには、[ユーザー補助のオプション] アイコンはありません。したがって、Windows NT 4 の場合、この手順で SystemInformation.HighContrast 設定を変更することはできません。
これ以外にも、アプリケーションのユーザー補助機能をテストするためのツールが用意されています。
キーボード フォーカスの公開をテストするには、拡大鏡を実行します。拡大鏡を開くには、[スタート] メニューをクリックし、[プログラム]、[アクセサリ]、[ユーザー補助] の順でポイントして、[拡大鏡] をクリックします。キーボードの Tab キーとマウスの両方を使用して、ユーザー インターフェイスにアクセスします。すべての操作が拡大鏡で適切に追跡されることを確認します。
画面要素の公開をテストするには、Inspect を実行し、マウスと Tab キーの両方を使用して各要素にアクセスします。ユーザー インターフェイスの各オブジェクトについて、[Inspect] ウィンドウの [Name]、[State]、[Role]、[Location]、[Value] の各フィールドに表示されている情報がユーザーにとって有意義であることを確認します。Inspect は、Microsoft® Active Accessibility® SDK の一部としてインストールされます。これは https://msdn.microsoft.com/library/default.asp?url=/downloads/list/accessibility.asp で入手できます。