Exemplarische Vorgehensweise: Erstellen von behindertengerechten Windows-basierten Anwendungen

Aktualisiert: November 2007

Das Erstellen von barrierefreien Anwendungen ist für Unternehmen von größter Bedeutung. Viele Länder haben Verfügungen für den Vertrieb von Software mit Eingabehilfen erlassen. Das Certified for Windows-Logo weist darauf hin, dass die Software die Anforderungen für barrierefreie Anwendungen erfüllt. Alleine in den USA sind etwa 30 Millionen Menschen, viele davon potenzielle Kunden, auf die Verwendung von Eingabehilfe für Software angewiesen..

Diese exemplarische Vorgehensweise beschäftigt sich mit den fünf Anforderungen an Eingabehilfen, die Anwendungen erfüllen müssen, um das "Certified for Windows"-Logo zu erhalten. Dementsprechend muss eine barrierefreie Anwendung folgende Forderungen erfüllen:

  • Unterstützung der Systemsteuerungseinstellungen für Größe, Farbe, Schriftart und Eingabe. Wenn die Benutzer die Einstellungen der Systemsteuerung ändern, wird die Größe der Menüleiste, der Titelleiste, der Ränder und der Statusleiste automatisch geändert. In dieser Anwendung müssen keine weiteren Änderungen an den Steuerelementen oder dem Code vorgenommen werden.

  • Unterstützung des Kontrastmodus.

  • Bereitstellen eines dokumentierten Tastaturzugriffs auf alle Features.

  • Visuelle und programmgesteuerte Anzeige der Position des Tastaturfokus.

  • Vermeiden der Übermittlung wichtiger Informationen allein per Audioausgabe.

Weitere Informationen finden Sie unter Ressourcen für das Entwerfen von Anwendungen mit Eingabehilfen, auf der MSDN Online-Webseite Certified for Windows Program (https://www.microsoft.com/germany/partner/isv/technsupport/zertifizierung/default.mspx) und auf der Webseite Designed for Windows XP Application Specification (https://go.microsoft.com/fwlink/?linkid=9775).

Weitere Informationen zur Unterstützung der verschiedenen Tastaturlayouts finden Sie unter Empfehlungen für die Entwicklung weltweit einsatzfähiger Anwendungen.

Erstellen des Projekts

In dieser exemplarischen Vorgehensweise wird die Benutzeroberfläche für eine Anwendung erstellt, mit der Pizzabestellungen entgegengenommen werden. Sie umfasst eine TextBox für den Namen des Kunden, eine RadioButton-Gruppe zur Auswahl der Pizzagröße, eine CheckedListBox für die Auswahl des Belags, zwei Button-Steuerelemente mit der Beschriftung Bestellen und Abbrechen sowie ein Menü mit dem Befehl Beenden.

Der Benutzer gibt den Kundennamen, die Pizzagröße und die gewünschten Beläge ein. Wenn er auf die Schaltfläche Bestellen klickt, werden in einem Meldungsfeld eine Zusammenfassung der Bestellung sowie der Preis angezeigt. Der Inhalt der Steuerelemente wird gelöscht, und es kann eine neue Bestellung eingegeben werden. Wenn der Benutzer auf die Schaltfläche Abbrechen klickt, wird der Inhalt der Steuerelemente gelöscht, und es kann eine neue Bestellung eingegeben werden. Klickt der Benutzer auf das Menüelement Beenden, wird das Programm beendet.

Der Schwerpunkt dieser exemplarischen Vorgehensweise liegt nicht auf dem Code für das Bestellsystem, sondern auf der barrierefreien Gestaltung der Benutzeroberfläche. Sie demonstriert die barrierefreien Features einer Reihe häufig verwendeter Steuerelemente, u. a. von Schaltflächen, Optionsfeldern, Textfeldern und Bezeichnungen.

So beginnen Sie mit der Erstellung der Anwendung

  • Erstellen Sie in Visual Basic, Visual C# oder Visual J# eine neue Windows-Anwendung. Geben Sie dem Projekt den Namen PizzaOrder. (Weitere Informationen finden Sie unter Erstellen neuer Projektmappen und Projekte.)

Hinzufügen der Steuerelemente zum Formular

Beim Hinzufügen der Steuerelemente zum Formular sollten Sie die folgenden Richtlinien für eine barrierefreie Anwendung beachten:

  • Legen Sie die Eigenschaften AccessibleDescription und AccessibleName fest. In diesem Beispiel ist die Default-Einstellung für AccessibleRole ausreichend. Weitere Informationen zu den Eigenschaften der Eingabehilfen finden Sie unter Informationen über Eingabehilfen für Steuerelemente in Windows Forms.

  • Legen Sie den Schriftgrad auf 10 Punkt oder größer fest.

    Hinweis:

    Wenn Sie den Schriftgrad des Formulars zunächst auf 10 Punkt festlegen, haben alle dem Formular anschließend hinzugefügten Steuerelemente ebenfalls den Schriftgrad 10.

  • Stellen Sie sicher, dass jedes Label-Steuerelement, das ein TextBox-Steuerelement beschreibt, dem TextBox-Steuerelement in der Aktivierreihenfolge unmittelbar vorangestellt ist.

  • Legen Sie mithilfe des kaufmännischen Und-Zeichens ("&") eine Zugriffstaste für die Text-Eigenschaft aller Steuerelemente fest, auf die ein Benutzer direkt zugreifen können sollte.

  • Fügen Sie mithilfe des kaufmännischen Und-Zeichens ("&") eine Zugriffstaste für die Text-Eigenschaft aller Bezeichnungen hinzu, die einem Steuerelement vorangestellt sind, auf das ein Benutzer direkt zugreifen können sollte. Legen Sie für die UseMnemonic-Eigenschaft der Bezeichnungen true fest, sodass der Fokus auf das nächste Steuerelement in der Aktivierreihenfolge gerichtet wird, wenn der Benutzer die Zugriffstaste drückt.

  • Fügen Sie allen Menüelementen Zugriffstasten hinzu.

So gestalten Sie eine Windows-Anwendung barrierefrei

  • Fügen Sie dem Formular die folgenden Steuerelemente hinzu, und legen Sie die Eigenschaften wie unten beschrieben fest. Am Ende der Tabelle sehen Sie eine modellhafte Darstellung der Anordnung der Steuerelemente im Formular.

    Objekt

    Eigenschaft

    Wert

    Form1

    AccessibleDescription

    Bestellformular

     

    AccessibleName

    Bestellformular

     

    Font Size

    10

     

    Text

    Pizzabestellformular

    PictureBox

    Name

    Logo

     

    AccessibleDescription

    Ein Stück Pizza

     

    AccessibleName

    Unternehmenslogo

     

    Bild

    Ein beliebiges Symbol oder eine Bitmap

    Bezeichnung

    Name

    companyLabel

     

    Text

    Good Pizza

     

    TabIndex

    1

     

    AccessibleDescription

    Unternehmensname

     

    AccessibleName

    Unternehmensname

     

    BackColor

    Blau

     

    ForeColor

    Gelb

     

    Schriftgrad

    18

    Bezeichnung

    Name

    customerLabel

     

    Text

    &Name

     

    TabIndex

    2

     

    AccessibleDescription

    Kundenname

     

    AccessibleName

    Kundenname

     

    UseMnemonic

    True

    TextBox

    Name

    customerName

     

    Text

    (keiner)

     

    TabIndex

    3

     

    AccessibleDescription

    Name des Kunden

     

    AccessibleName

    Name des Kunden

    GroupBox

    Name

    sizeOptions

     

    AccessibleDescription

    Mögliche Pizzagrößen

     

    AccessibleName

    Mögliche Pizzagrößen

     

    Text

    Pizzagröße

     

    TabIndex

    4

    RadioButton

    Name

    smallPizza

     

    Text

    &Klein 6,00 €

     

    Aktiviert

    True

     

    TabIndex

    0

     

    AccessibleDescription

    Kleine Pizza

     

    AccessibleName

    Kleine Pizza

    RadioButton

    Name

    largePizza

     

    Text

    &Groß 10,00 €

     

    TabIndex

    1

     

    AccessibleDescription

    Große Pizza

     

    AccessibleName

    Große Pizza

    Bezeichnung

    Name

    toppingsLabel

     

    Text

    &Beläge (jeweils 0,75 €)

     

    TabIndex

    5

     

    AccessibleDescription

    Bezeichnung des Belags

     

    AccessibleName

    Bezeichnung des Belags

     

    UseMnemonic

    True

    CheckedListBox

    Name

    toppings

     

    TabIndex

    6

     

    AccessibleDescription

    Mögliche Beläge

     

    AccessibleName

    Mögliche Beläge

     

    Items

    Peperoni, Salami, Champignons

    Button

    Name

    order

     

    Text

    &Bestellen

     

    TabIndex

    7

     

    AccessibleDescription

    Gesamtpreis der Bestellung ermitteln

     

    AccessibleName

    Gesamtpreis

    Schaltfläche

    Name

    cancel

     

    Text

    &Abbrechen

     

    TabIndex

    8

     

    AccessibleDescription

    Abbruch der Bestellung

     

    AccessibleName

    Bestellung abbrechen

    MainMenu

    Name

    theMainMenu

    MenuItem

    Name

    fileCommands

     

    Text

    &Datei

    MenuItem

    Name

    exitApp

     

    Text

    B&eenden

    Das Formular sollte etwa folgendermaßen aussehen:

Unterstützung des Kontrastmodus

Der Kontrastmodus ist eine Windows-Systemeinstellung, die durch die Verwendung kontrastreicher Farben und großer Schriftgrade die Lesbarkeit für sehbehinderte Benutzer verbessert. Mit der SystemInformation.HighContrast-Eigenschaft bestimmen Sie, ob der Kontrastmodus festgelegt ist.

Wenn SystemInformation.HighContrast auf true festgelegt wird, sollten die folgenden Voraussetzungen in der Anwendung erfüllt sein:

  • Alle Elemente der Benutzeroberfläche werden mit dem Farbschema des Systems angezeigt

  • Alle durch Farben ausgedrückten Informationen werden auch mithilfe von visuellen Hinweisen oder Audiosignalen wiedergeben. Wenn beispielsweise bestimmte Listenelemente in roter Schrift hervorgehoben sind, können Sie diese auch noch fett formatieren, sodass durch die Fettformatierung zusätzlich erkennbar ist, dass die Elemente hervorgehoben sind.

  • Hinter Text werden keine Symbole oder Muster angezeigt

Die Anwendung sollte beim Start automatisch die Einstellung von HighContrast überprüfen und auf das Systemereignis UserPreferenceChanged reagieren. Das UserPreferenceChanged-Ereignis wird ausgelöst, sobald sich der Wert von HighContrast ändert.

In unserer Anwendung ist lblCompanyName das einzige Element, das nicht die Systemfarbeinstellungen verwendet. Mit der SystemColors-Klasse ändern Sie die Farbeinstellungen der Bezeichnung in die vom Benutzer ausgewählten Systemfarben.

So aktivieren Sie den Kontrastmodus auf effektive Art und Weise

  1. Erstellen Sie eine Methode, mit der Sie für die Bezeichnung die Systemfarben festlegen .

    ' 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. Rufen Sie die SetColorScheme -Prozedur im Formularkonstruktor (Public Sub New() in Visual Basic, public class Form1 in Visual C# und Public Form1 in Visual J#) auf. Um auf den Konstruktor in Visual Basic zugreifen zu können, müssen Sie den Bereich Vom Windows Form-Designer generierter Code erweitern.

    ' Visual Basic 
    Public Sub New()
       MyBase.New()
       InitializeComponent()
       SetColorScheme()
    End Sub
    
    // C#
    public Form1()
    {
       InitializeComponent();
       SetColorScheme();
    }
    
    // Visual J#
    public Form1()
    {
       InitializeComponent();
       SetColorScheme();
    }
    
  3. Erstellen Sie eine Ereignisprozedur mit der entsprechenden Signatur, die auf das UserPreferenceChanged-Ereignis reagiert.

    ' 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. Fügen Sie dem Formularkonstruktor nach dem Aufruf von InitializeComponents Code hinzu, der die Ereignisprozedur mit dem Systemereignis verknüpft. Diese Methode ruft die SetColorScheme -Prozedur auf.

    ' 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. Fügen Sie der Dispose-Methode des Formulars vor dem Aufruf der Dispose-Methode der Basisklasse Code hinzu, der das Ereignis freigibt, wenn die Anwendung geschlossen wird. Um auf die Dispose-Methode in Visual Basic zugreifen zu können, müssen Sie den Bereich Vom Windows Form-Designer generierter Code erweitern.

    Hinweis:

    Der Systemereigniscode führt separat von der Hauptanwendung einen Thread aus. Wenn Sie das Ereignis nicht freigeben, wird auch nach dem Schließen des Programms weiterhin der Code ausgeführt, den Sie mit dem Ereignis verknüpfen.

    ' 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. Drücken Sie F5, um die Anwendung auszuführen.

Übermitteln wichtiger Informationen auf andere Weise als per Audioausgabe

In dieser Anwendung werden keine Informationen allein durch Audioausgabe übermittelt. Wenn Sie in Ihrer Anwendung Audioausgabe verwenden, sollten Sie die Informationen auch auf andere Weise zur Verfügung stellen.

So übermitteln Sie Informationen auf andere Weise als per Audioausgabe

  1. Lassen Sie die Titelleiste mithilfe der Windows API-Funktion FlashWindow blinken. Ein Beispiel für einen Aufruf von Windows-API-Funktionen finden Sie unter Exemplarische Vorgehensweise: Aufrufen von Windows-APIs.

    Hinweis:

    Falls die Benutzer Windows SoundSentry Service aktiviert haben, blinkt das Fenster während der Wiedergabe der Systemsounds über die integrierten Lautsprecher.

  2. Zeigen Sie wichtige Informationen in einem nicht modalen Fenster an, sodass die Benutzer darauf reagieren können. Weitere Informationen finden Sie unter Anzeigen modaler und nicht modaler Windows Forms.

  3. Zeigen Sie ein Meldungsfeld an, das den Tastaturfokus erhält. Dies sollte vermieden werden, wenn die Benutzer möglicherweise eine Eingabe vornehmen.

  4. Zeigen Sie eine Statusanzeige im Statusbereich der Taskleiste an. Weitere Informationen finden Sie unter Hinzufügen von Anwendungssymbolen zur Taskleiste mit der NotifyIcon-Komponente in Windows Forms.

Testen der Anwendung

Bevor Sie die Anwendung bereitstellen, sollten Sie die implementierten Eingabehilfen testen.

So testen Sie die Eingabehilfen

  1. Um den Tastaturzugriff zu testen, ziehen Sie den Mausstecker aus dem Computer heraus und greifen auf alle Features der Benutzeroberfläche nur mithilfe der Tastatur zu. Stellen Sie sicher, dass sich sämtliche Aufgaben auch ausschließlich über die Tastatur ausführen lassen.

  2. Wählen Sie zum Testen der Kontrastunterstützung in der Systemsteuerung das Symbol Eingabehilfen. Klicken Sie auf die Registerkarte Anzeige, und aktivieren Sie das Kontrollkästchen Kontrast aktivieren. Überprüfen Sie in den einzelnen Elementen der Benutzeroberfläche, ob die Farben und die Schriftart entsprechend geändert wurden. Darüber hinaus muss die Anzeige von Symbolen und Mustern hinter dem Text unterdrückt sein.

    Hinweis:

    Unter Windows NT 4 ist in der Systemsteuerung kein Symbol für Eingabehilfen verfügbar. Diese Prozedur zum Ändern der SystemInformation.HighContrast-Einstellung funktioniert unter Windows NT 4 daher nicht.

  3. Die Eingabehilfen einer Anwendung können darüber hinaus direkt mithilfe spezieller Tools getestet werden.

  4. Um die Kennzeichnung des Tastaturfokus zu testen, verwenden Sie die Bildschirmlupe. (Zeigen Sie zum Öffnen der Bildschirmlupe im Startmenü auf Programme, dann auf Zubehör, anschließend auf Eingabehilfen, und klicken Sie auf Bildschirmlupe.) Navigieren Sie durch die Benutzeroberfläche. Verwenden Sie dazu sowohl die TAB-Taste als auch die Maus. Stellen Sie sicher, dass sämtliche Aktionen ordnungsgemäß in der Bildschirmlupe wiedergegeben werden.

  5. Um die Kennzeichnung der Bildschirmelemente zu testen, führen Sie Inspect aus, und testen Sie die einzelnen Elemente sowohl mit der Maus als auch mit der TAB-TASTE. Stellen Sie sicher, dass die in den Feldern Name, State, Role, Location und Value des Fensters Inspect angezeigten Informationen für die Benutzer der einzelnen Objekte der Benutzeroberfläche aussagekräftig sind. Inspect wird als Teil des Microsoft® Active Accessibility®-SDKs installiert, das unter https://msdn.microsoft.com/library/default.asp?url=/downloads/list/accessibility.asp erhältlich ist.