Genomgång: Skapa ett tillgängligt Windows-baserat program
Att skapa ett tillgängligt program har viktiga affärskonsekvenser. Många myndigheter har tillgänglighetsregler för programvaruköp. Logotypen Certifierad för Windows innehåller hjälpmedelskrav. Uppskattningsvis 30 miljoner invånare i USA, många av dem potentiella kunder, påverkas av tillgången till programvara.
Den här genomgången hanterar de fem tillgänglighetskraven för logotypen Certifierad för Windows. Enligt dessa krav kommer ett tillgängligt program att:
Stöd för inställningar för kontrollpanelens storlek, färg, teckensnitt och indata. Menyraden, namnlisten, kantlinjerna och statusfältet ändrar storlek när användaren ändrar inställningarna för kontrollpanelen. Inga ytterligare ändringar av kontrollerna eller koden krävs i det här programmet.
Stöd för högkontrastläge.
Ge dokumenterad tangentbordsåtkomst till alla funktioner.
Exponera platsen för tangentbordets fokus visuellt och programmatiskt.
Undvik att förmedla viktig information enbart med ljud.
Mer information finns i Resurser för att utforma tillgängliga program.
Information om hur du stöder olika tangentbordslayouter finns i Best Practices for Developing World-Ready Applications.
Skapa projektet
Den här genomgången skapar användargränssnittet för ett program som tar pizzabeställningar. Den består av en TextBox för kundens namn, en RadioButton grupp för att välja pizzastorlek, en CheckedListBox för att välja toppings, två knappkontroller märkta Order and Cancel och en meny med ett exit-kommando.
Användaren anger kundens namn, pizzans storlek och önskade pålägg. När användaren klickar på knappen Order visas en sammanfattning av ordern och dess kostnad i en meddelanderuta och kontrollerna rensas och är redo för nästa beställning. När användaren klickar på knappen Avbryt rensas kontrollerna och är redo för nästa beställning. När användaren klickar på menyalternativet Avsluta stängs programmet.
Betoningen av den här genomgången är inte koden för ett detaljhandelsordersystem, utan tillgängligheten för användargränssnittet. Genomgången visar hjälpmedelsfunktionerna i flera kontroller som används ofta, inklusive knappar, alternativknappar, textrutor och etiketter.
För att börja skapa applikationen
- Skapa ett nytt Windows-program i Visual Basic eller Visual C#. Ge projektet namnet PizzaOrder. Mer information finns i Skapa nya lösningar och projekt.
Lägga till kontrollerna i formuläret
När du lägger till kontrollerna i ett formulär bör du tänka på följande riktlinjer för att göra ett tillgängligt program:
Ange egenskaperna AccessibleDescription och AccessibleName. I det här exemplet räcker det med standardinställningen för AccessibleRole. Mer information om hjälpmedelsegenskaperna finns i Tillhandahålla hjälpmedelsinformation för kontroller i ett Windows-formulär.
Ange teckenstorleken till 10 punkter eller större.
Note
Om du anger teckenstorleken för formuläret till 10 när du startar, kommer alla kontroller som sedan läggs till i formuläret att ha en teckenstorlek på 10.
Kontrollera att alla etikettkontroller som beskriver en TextBox-kontroll omedelbart föregår TextBox-kontrollen i tabbordningen.
Lägg till en åtkomstnyckel med tecknet "&" i egenskapen Text för alla kontroller som användaren kanske vill navigera till.
Lägg till en åtkomstnyckel med tecknet "&" i egenskapen Text för etiketten som föregår en kontroll som användaren kanske vill navigera till. Ange egenskapen UseMnemonic för etiketter till
true
, så att fokus ställs in på nästa kontroll i tabbordningen när användaren trycker på åtkomstnyckeln.Lägg till åtkomstnycklar till alla menyalternativ.
Så här gör du ditt Windows-program tillgängligt
Lägg till kontrollerna i formuläret och ange egenskaperna enligt beskrivningen nedan. Se bilden i slutet av tabellen för en modell för hur du ordnar kontrollerna i formuläret.
Objekt Egenskap Värde Formulär 1 TillgängligBeskrivning Beställningsformulär AccessibleNamn Beställningsformulär Teckenstorlek 10 Text Formulär för pizzabeställning Bildruta Namn logotyp BeskrivningFörTillgänglighet En bit pizza TillgängligNamn Företagslogotyp Bild Valfri ikon eller bitmapp Etikett Namn företagsetikett Text Bra pizza TabIndex 1 Tillgänglighetsbeskrivning Företagsnamn TillgängligNamn Företagsnamn Bakgrundsfärg Blå Forecolor Gul Teckenstorlek 18 Etikett Namn kundetikett Text &namn TabIndex 2 TillgängligBeskrivning Etikett för kundnamn Tillgänglighetsnamn Etikett för kundnamn UseMnemonic Sann Textruta Namn kundnamn Text (ingen) TabIndex 3 TillgängligBeskrivning Kundnamn TillgängligtNamn Kundnamn Gruppruta Namn storleksalternativ Tillgänglig beskrivning Alternativ för pizzastorlek TillgängligtNamn Alternativ för pizzastorlek Text Pizzastorlek TabIndex 4 Radiobutton Namn smallPizza Text &Small $6,00 Rutig Sann TabIndex 0 Tillgänglig beskrivning Liten pizza TillgängligNamn Liten pizza Radiobutton Namn largePizza Text &Large $10,00 TabIndex 1 Tillgänglighetsbeskrivning Stor pizza Tillgänglighetsnamn Stor pizza Etikett Namn Påläggetikett Text &Toppings ($0.75 vardera) TabIndex 5 TillgängligBeskrivning Toppingetikett TillgängligtNamn Etikett för pålägg UseMnemonic Sann CheckedListBox Namn Pålägg TabIndex 6 Tillgänglig beskrivning Tillgängliga toppings Tillgänglighetsnamn Tillgängliga toppings Objekt Pepperoni, Korv, Svamp Knapp Namn ordning Text &beställning TabIndex 7 TillgängligBeskrivning Summera beställningen TillgängligtNamn Totalordning Knapp Namn annullera Text &Avbryt TabIndex 8 Beskrivning för tillgänglighet Avbryt beställningen Tillgänglighetsnamn Avbryt beställning Huvudmeny Namn Huvudmenyn Menyobjekt Namn filkommandon Text &fil Menyalternativ Namn avslutaApp Text E&xit Formuläret ser ut ungefär så här:
Stöd för högkontrastläge
Högkontrastläge är en Windows-systeminställning som förbättrar läsbarheten med hjälp av kontrasterande färger och teckenstorlekar som är fördelaktiga för användare med nedsatt syn. Egenskapen HighContrast tillhandahålls för att avgöra om högkontrastläget har angetts.
Om SystemInformation.HighContrast är true
bör programmet:
Visa alla användargränssnittselement med hjälp av systemets färgschema
Förmedla med visuella signaler eller ljud all information som förmedlas genom färg. Om vissa listobjekt till exempel är markerade med ett rött teckensnitt kan du också lägga till fetstil i teckensnittet, så att användaren har en icke-färgreplik som objekten är markerade med.
Utelämna bilder eller mönster bakom text
Programmet bör kontrollera inställningen för HighContrast när programmet startar och svara på systemhändelsen UserPreferenceChanged. Händelsen UserPreferenceChanged utlöses när värdet för HighContrast ändras.
I vårt program är det enda element som inte använder systeminställningarna för färg lblCompanyName
. Klassen SystemColors används för att ändra färginställningarna för etiketten till de användarvalda systemfärgerna.
Aktivera högkontrastläge på ett effektivt sätt
Skapa en metod för att ange färgerna på etiketten till systemfärgerna.
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; } }
Anropa
SetColorScheme
-proceduren i formulärkonstruktorn (Public Sub New()
i Visual Basic ochpublic Form1()
i Visual C#). För att få åtkomst till konstruktorn i Visual Basic måste du expandera den region som är märkt Windows Form Designer-genererad kod.Public Sub New() MyBase.New() InitializeComponent() SetColorScheme() End Sub
public Form1() { InitializeComponent(); SetColorScheme(); }
Skapa en händelseprocedur med lämplig signatur för att svara på den UserPreferenceChanged händelsen.
Protected Sub UserPreferenceChanged(sender As Object, _ e As Microsoft.Win32.UserPreferenceChangedEventArgs) SetColorScheme() End Sub
public void UserPreferenceChanged(object sender, Microsoft.Win32.UserPreferenceChangedEventArgs e) { SetColorScheme(); }
Lägg till kod i formulärkonstruktorn efter anropet till
InitializeComponents
för att ansluta händelseproceduren till systemhändelsen. Den här metoden anropar procedurenSetColorScheme
.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); }
Lägg till kod i formuläret Dispose-metoden, innan anropet till Dispose-metoden för basklassen, för att släppa händelsen när programmet stängs. För att få åtkomst till Dispose-metoden i Visual Basic måste du expandera den region som är märkt Windows Form Designer-genererad kod.
Notera
Systemhändelsekoden kör en tråd som är separat från huvudprogrammet. Om du inte släpper händelsen körs koden som du ansluter till händelsen även efter att programmet har stängts.
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 ); }
Tryck på F5 för att köra programmet.
Förmedla viktig information med andra medel än ljud
I det här programmet förmedlas ingen information enbart av ljud. Om du använder ljud i programmet bör du även ange informationen på något annat sätt.
Att tillhandahålla information på något annat sätt än ljud
Gör så att namnlisten blinkar med hjälp av Windows API-funktionen FlashWindow. Ett exempel på hur du anropar Windows API-funktioner finns i Genomgång: Anropa Windows-API:er.
Anteckning
Användaren kan ha Windows SoundSentry-tjänsten aktiverad, vilket också gör att fönstret blinkar när systemljuden spelas upp via datorns inbyggda högtalare.
Visa viktig information i ett icke-modalt fönster så att användaren kan svara på den.
Visa en meddelanderuta som hämtar tangentbordets fokus. Undvik den här metoden när användaren kanske skriver.
Visa en statusindikator i statusmeddelandeområdet i aktivitetsfältet. Mer information finns i Lägga till programikoner i Aktivitetsfältet med Windows Forms NotifyIcon-komponenten.
Testa programmet
Innan du distribuerar programmet bör du testa de hjälpmedelsfunktioner som du har implementerat.
Testa hjälpmedelsfunktioner
Om du vill testa tangentbordsåtkomst kopplar du bort musen och navigerar i användargränssnittet för varje funktion med endast tangentbordet. Kontrollera att alla uppgifter endast kan utföras med hjälp av tangentbordet.
Om du vill testa stöd för Högkontrast väljer du ikonen Hjälpmedelsalternativ på Kontrollpanelen. Klicka på fliken Visa och markera kryssrutan Använd högkontrast. Navigera genom alla användargränssnittselement för att se till att färg- och teckensnittsändringarna återspeglas. Se också till att bilder eller mönster som ritas bakom text utelämnas.
Not
Windows NT 4 har ingen ikon för hjälpmedelsalternativ på Kontrollpanelen. Den här proceduren för att ändra inställningen SystemInformation.HighContrast fungerar alltså inte i Windows NT 4.
Andra verktyg är lättillgängliga för att testa tillgängligheten för ett program.
Om du vill testa hur du exponerar tangentbordsfokuset kör du Magnifier. (Om du vill öppna den klickar du på menyn Starta, pekar på Program, pekar på Tillbehör, pekar på Hjälpmedeloch klickar sedan på Förstoringsglas). Navigera i användargränssnittet med hjälp av både tangentbordstabbning och musen. Kontrollera att all navigering spåras korrekt i Förstorare.
Om du vill testa att exponera skärmelement kör du Inspektera och använder både musen och TAB-tangenten för att nå varje element. Se till att informationen som visas i fälten Namn, Tillstånd, Roll, Plats och Värde i fönstret Inspektera är meningsfull för användaren för varje objekt i användargränssnittet.
.NET Desktop feedback