次の方法で共有


チュートリアル : ユーザー補助対応の 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 で構成されます。

ユーザーは、顧客の名前、ピザのサイズ、および希望のトッピングを入力します。ユーザーが [注文] をクリックすると、メッセージ ボックスに注文内容の一覧と価格が表示され、コントロールに入力した内容は消去されて次の注文を受け付ける状態になります。ユーザーが [キャンセル] をクリックすると、コントロールに入力した内容は消去されて次の注文を受け付ける状態になります。ユーザーが [終了] をクリックすると、プログラムは終了します。

このチュートリアルは、小売り注文システムのコードではなく、ユーザー インターフェイスのユーザー補助に重点を置いています。このチュートリアルでは、ボタン、オプション ボタン、テキスト ボックス、ラベルなど、頻繁に使用されるコントロールのユーザー補助機能について例を示しながら説明します。

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

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

フォームにコントロールを追加するときには、ユーザー補助アプリケーションの作成に関する次のガイドラインを考慮してください。

  • AccessibleDescription プロパティおよび AccessibleName プロパティを設定します。この例では、AccessibleRole の設定を Default にしておきます。ユーザー補助プロパティの詳細については、「Windows フォーム上のコントロールのユーザー補助情報の提供」を参照してください。

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

    cb35a5fw.alert_note(ja-jp,VS.90).gifメモ :

    メモ   起動時にフォームのフォント サイズを 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 クラスを使用します。

ハイコントラスト モードを効果的に有効にするには

  1. ラベルの色をシステム カラーに設定するメソッドを作成します。

    ' 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());
       }
    }
    
  2. フォーム コンストラクタ (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();
    }
    
  3. 適切なシグネチャを使用して、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();
    }
    
  4. フォーム コンストラクタで、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
       //
    }
    
  5. フォームの Dispose メソッドで、基本クラスの Dispose メソッドの呼び出しの前に、アプリケーションの終了時にイベントを解放するコードを追加します。Visual Basic で Dispose メソッドにアクセスするには、[Windows フォーム デザイナで生成されたコード] というラベルの付いた領域を展開する必要があります。

    cb35a5fw.alert_note(ja-jp,VS.90).gifメモ :

    メモ   システム イベント コードは、メイン アプリケーションとは別のスレッドを実行します。イベントを解放しないと、イベントにフックしたコードがプログラムの終了後も動作し続けます。

    ' 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);
       }
    
  6. F5 キーを押してアプリケーションを実行します。

サウンド以外の手段による重要な情報の伝達

このアプリケーションには、サウンドだけで伝達される情報はありません。アプリケーションでサウンドを使用する場合は、同じ情報を他の手段でも提供する必要があります。

サウンド以外の手段で情報を伝達するには

  1. Windows API 関数 FlashWindow を使用してタイトル バーを点滅させます。Windows API 関数を呼び出す方法の例については、「チュートリアル : Windows API の呼び出し」を参照してください。

    cb35a5fw.alert_note(ja-jp,VS.90).gifメモ :

    メモ   ユーザーが Windows の SoundSentry サービスを有効にしている場合は、コンピュータの内蔵スピーカーを通じてシステム サウンドが再生されると、ウィンドウが点滅します。

  2. 重要な情報はモーダルでないウィンドウで表示し、ユーザーがそれに応答できるようにします。詳細については、「Windows フォームのモーダルおよびモードレスでの表示」を参照してください。

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

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

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

アプリケーションを配置する前に、実装したユーザー補助機能をテストします。

ユーザー補助機能をテストするには

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

  2. ハイコントラストのサポートをテストするには、コントロール パネルの [ユーザー補助のオプション] アイコンをダブルクリックします。[画面] タブをクリックし、[ハイコントラストを使う] チェック ボックスをオンにします。ユーザー インターフェイスのすべての要素について、色とフォントの変更が反映されていることを確認します。また、テキストの後ろにイメージやパターンが表示されていないことを確認します。

    cb35a5fw.alert_note(ja-jp,VS.90).gifメモ :

    メモ   Windows NT 4 のコントロール パネルには、[ユーザー補助のオプション] アイコンはありません。したがって、Windows NT 4 の場合、この手順で SystemInformation.HighContrast 設定を変更することはできません。

  3. これ以外にも、アプリケーションのユーザー補助機能をテストするためのツールが用意されています。

  4. キーボード フォーカスの公開をテストするには、拡大鏡を実行します。拡大鏡を開くには、[スタート] メニューをクリックし、[プログラム]、[アクセサリ]、[ユーザー補助] の順でポイントして、[拡大鏡] をクリックします。キーボードの Tab キーとマウスの両方を使用して、ユーザー インターフェイスにアクセスします。すべての操作が拡大鏡で適切に追跡されることを確認します。

  5. 画面要素の公開をテストするには、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 で入手できます。