共用方式為


逐步解說:建立 Windows 架構的可及性應用程式

更新:2007 年 11 月

建立可及性強的應用程式具有相當重要的商業意義,而且目前許多政府對於市售軟體都已明訂可及性的相關法規。如果軟體產品具有「Windows 憑證」標誌,就表示該軟體符合可及性的要求。根據估計,光是美國境內就有約三千萬居民需要使用軟體的可及性,其中絕大部分屬於潛在客戶。

本逐步解說的重點便是 Windows 憑證標誌的五項可及性需求,而根據這些需求設計的可及性應用程式,都將能夠:

  • 支援控制台大小、色彩、字型和輸入設定。當使用者變更控制台設定時,功能表列、標題列、框線和狀態列的大小也會跟著調整。控制項或程式碼在本應用程式中不需做其他的變更。

  • 支援高對比模式。

  • 所有功能都可經由鍵盤存取,並提供書面說明。

  • 以視覺呈現和程式設計方式顯示鍵盤焦點的位置。

  • 避免只以音效傳達重要資訊。

如需詳細資訊,請參閱設計可及性應用程式的資源、MSDN Online Certified for Windows Program 網頁 (https://msdn.microsoft.com/certification/default.asp) 以及 Designed for Windows XP Application Specification 網頁 (https://go.microsoft.com/fwlink/?LinkId=9775)。

如需支援各種鍵盤配置的詳細資訊,請參閱開發世界性的應用程式的最佳作法

建立專案

本逐步解說會建立一個可以接收比薩訂單的應用程式使用者介面,這個介面包含可以填入客戶姓名的 TextBox、選取比薩大小的 RadioButton 群組、選取餡料的 CheckedListBox、兩個分別標示為 [Order] 和 [Cancel] 的 Button 控制項,以及含有 [Exit] 命令的 Menu 控制項。

使用者可以輸入客戶名稱、比薩大小和想要的餡料。使用者按一下 [Order] 按鈕時,訊息方塊中會顯示訂單摘要和費用,然後控制項會清除資料並準備接受下一筆訂單。當使用者按下 [Cancel] 按鈕時,控制項也會清除資料並準備接受下一筆訂單。當使用者按下 [Exit] 功能表項目時,程式便會關閉。

本逐步解說的重點並不是零售訂單系統程式碼,而是在於使用者介面的可及性。本逐步解說描述多個常用控制項的可及性功能,包含按鈕、選項按鈕、文字方塊和標籤。

若要開始製作應用程式

  • 在 Visual Basic、Visual C# 或 Visual J# 中,建立新的 Windows 應用程式。將專案命名為 PizzaOrder (如需詳細資訊,請參閱建立新的方案和專案)。

將控制項加入至表單

將控制項加入至表單時,請注意下列產生可及性應用程式的重點:

  • 設定 AccessibleDescriptionAccessibleName 屬性。在本範例中,AccessibleRole 的預設值已經足夠了。如需可及性屬性的詳細資訊,請參閱為 Windows Form 上的控制項提供可及性資訊

  • 將字型大小設定為 10 或更大的點數。

    注意事項:

    如果您一開始將表單的字型大小設定為 10,則之後加入至表單的所有控制項的字型大小都將會是 10。

  • 確定任何描述 TextBox 控制項的標籤控制項定位順序,剛好就在 TextBox 控制項之前。

  • 使用 "&" 字元,在使用者要巡覽的控制項 Text 屬性中,加入便捷鍵 (Access Key)。

  • 使用 "&" 字元,在標籤 (位於使用者要巡覽的控制項之前) 的 Text 屬性中,加入便捷鍵。將標籤的 UseMnemonic 屬性設為 true,如此一來,當使用者按下便捷鍵時,焦點就會設為定位順序的下一個控制項。

  • 將便捷鍵加入至所有功能表項目。

若要讓 Windows 應用程式具備可及性

  • 如下所述在表單中加入控制項並設定屬性 (Property)。請參閱表格下方的圖片,取得如何管理表單中控制項的模型。

    物件

    屬性

    Form1

    AccessibleDescription

    Order form

     

    AccessibleName

    Order form

     

    Font Size

    10

     

    Text

    Pizza Order Form

    PictureBox

    Name

    logo

     

    AccessibleDescription

    A slice of pizza

     

    AccessibleName

    Company logo

     

    Image

    Any icon or bitmap

    Label

    Name

    companyLabel

     

    Text

    Good Pizza

     

    TabIndex

    1

     

    AccessibleDescription

    Company name

     

    AccessibleName

    Company name

     

    Backcolor

    Blue

     

    Forecolor

    Yellow

     

    Font size

    18

    Label

    Name

    customerLabel

     

    Text

    &Name

     

    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

    Pizza size

     

    TabIndex

    4

    RadioButton

    Name

    smallPizza

     

    Text

    &Small $6.00

     

    Checked

    True

     

    TabIndex

    0

     

    AccessibleDescription

    Small pizza

     

    AccessibleName

    Small pizza

    RadioButton

    Name

    largePizza

     

    Text

    &Large $10.00

     

    TabIndex

    1

     

    AccessibleDescription

    Large pizza

     

    AccessibleName

    Large pizza

    Label

    Name

    toppingsLabel

     

    Text

    &Toppings ($0.75 each)

     

    TabIndex

    5

     

    AccessibleDescription

    Toppings label

     

    AccessibleName

    Toppings label

     

    UseMnemonic

    True

    CheckedListBox

    Name

    toppings

     

    TabIndex

    6

     

    AccessibleDescription

    Available toppings

     

    AccessibleName

    Available toppings

     

    Items

    Pepperoni, Sausage, Mushrooms

    Button

    Name

    order

     

    Text

    &Order

     

    TabIndex

    7

     

    AccessibleDescription

    Total the order

     

    AccessibleName

    Total order

    Button

    Name

    cancel

     

    Text

    &Cancel

     

    TabIndex

    8

     

    AccessibleDescription

    Cancel the order

     

    AccessibleName

    Cancel order

    MainMenu

    Name

    theMainMenu

    MenuItem

    Name

    fileCommands

     

    Text

    &File

    MenuItem

    Name

    exitApp

     

    Text

    E&xit

    您的表單看起來會是這個樣子:

    比薩訂購表單

支援高對比模式

高對比模式是 Windows 系統的一項設定,使用對比色彩和字型大小以提升可讀性,對於視覺損傷的使用者很有幫助。SystemInformation.HighContrast 屬性可以判斷是否有設定高對比模式。

當 SystemInformation.HighContrast 為 true 時,應用程式將會:

  • 使用系統色彩配置,顯示所有使用者介面項目。

  • 透過視覺提示或音效來傳達原本以色彩傳達的所有資訊。例如,若使用紅色字型反白顯示特定清單項目,您也可以在字型中加入粗體,讓使用者透過非色彩提示,得知項目已反白顯示。

  • 略過文字後的任何影像或圖樣。

當應用程式啟動並回應 UserPreferenceChanged 系統事件時,應該會檢查 HighContrast 的設定。每當 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 Form 設計工具產生的程式碼」的區域。

    ' 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 Form 設計工具產生的程式碼」的區域。

    注意事項:

    系統事件程式碼會執行獨立於主應用程式的執行緒,所以如果您沒有發行事件,即使程式關閉,連接該事件的程式碼仍然會照常執行。

    ' 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

    注意事項:

    使用者可能會啟動 Windows 聲音感測服務,當系統音效透過電腦內建喇叭撥放時,同時讓視窗閃爍。

  2. 在非強制回應視窗中顯示重要資訊,讓使用者可以有所回應。如需詳細資訊,請參閱顯示強制回應和非強制回應 Windows Form

  3. 顯示取得鍵盤焦點的訊息方塊,但是如果使用者可能會輸入資料,則應避免使用這個方法。

  4. 在工作列的狀態區域內顯示狀態指示器。如需詳細資訊,請參閱使用 Windows Form NotifyIcon 元件將應用程式圖示加入至工作列

測試應用程式

在部署應用程式之前,請務必測試已實作的所有可及性功能。

若要測試可及性功能

  1. 若要測試鍵盤存取,請先拔除滑鼠,然後只利用鍵盤逐一測試使用者介面中的每一個功能,必須確保所有的工作都可以只透過鍵盤按鈕執行。

  2. 若要測試是否支援高對比,請在 [控制台] 中選擇 [協助工具選項] 圖示。按一下 [畫面] 索引標籤,再選取 [使用高對比] 核取方塊。巡覽所有的使用者介面項目,確定色彩和字型已適切反映變更結果,同時確認文字後方的影像或圖樣都已被略過。

    注意事項:

    Windows NT 4 的 [控制台] 中並沒有 [協助工具選項] 圖示,因此,這個變更 SystemInformation.HighContrast 設定值的程序不適用於 Windows NT 4。

  3. 另外還有其他工具可以測試應用程式的可及性。

  4. 若要測試是否可以明顯顯示鍵盤焦點,請執行放大鏡 (若要開啟放大鏡,請按一下 [開始] 功能表,依序指向 [所有程式]、[附屬應用程式]、[協助工具],然後按一下 [放大鏡])。同時使用鍵盤 TAB 鍵和滑鼠來巡覽使用者介面,務必確定 [放大鏡] 會正確追蹤所有的巡覽。

  5. 若要測試是否可以明顯顯示螢幕項目,請執行 [Inspect],並且同時使用滑鼠和 TAB 鍵跳到每個項目。對於 UI 中的每個物件,請確定 [Inspect] 視窗的 [名稱]、[狀態]、[角色]、[位置] 和 [值] 欄位所顯示的資訊對使用者都是有意義的。Inspect 會隨同 Microsoft® Active Accessibility® SDK (可以在 https://msdn.microsoft.com/library/default.asp?url=/downloads/list/accessibility.asp 取得) 一併安裝。