Przykładowa dostępna aplikacja w Visual Studio - krok po kroku Zadaniem poniższego opisu jest pokazanie, jak stworzyć aplikację z dostępnym interfejsem. Sama aplikacja nie ma konkretnego zastosowania i obsługa interfejsu nie została zaimplementowana, poza tymi elementami, których zademonstrowanie tego wymagało. W języku C# 1. W Visual Studio tworzymy nowy nowy projekt. Jako typ projektu wybieramy Windows Forms Application. 2. Modyfikujemy właściwości Form1, ustawiając rozmiar czcionki na 14.0pt. Dla tego przykładu właściwość Text (tytuł okna) zmieniamy na Dostępna aplikacja. Właściwości Accessibility description nadajemy wartość Okno główne dostępnej aplikacji (pomijając znaki cudzysłowu). Właściwość AccessibilityName ustawiamy na Dostępna aplikacja. 3. Teraz dodajemy potrzebne kontrolki zwracając uwagę na wartość właściwości TabIndex każdej z nich. Ta kwestia została dokładniej opisana Tutaj. Najprościej dodać kolejno: MenuStrip - menu główne aplikacji Label - Napis kolorowy nr 1 Label - Napis kolorowy nr 2 Label - Napis kolorowy nr 3 Label - etykieta opisująca pole edycyjne (Imię) TextBox - pole edycyjne imie
Label - etykieta dla pola Nazwisko TextBox - pole edycyjne nazwisko Label - etykieta dla pola Adres e-mail TextBox - pole email Label - etykieta dla listy wielu wyborów Zainteresowania CheckedListBox - lista wielu wyborów zainteresowania Label - etykieta dla pola edycyjnego Kilka słów o sobie TextBox - tekstowe pole edycyjne osobie GroupBox - kontener wyborszkoly grupujący przyciski typu Radio odpowiadające poziomom wykształcenia do wyboru RadioButton - przycisk Podstawowe RadioButton - przycisk Zawodowe RadioButton - przycisk Średnie RadioButton - przycisk Wyższe Button - Anuluj Button - Zatwierdź NotifyIcon - notifyicon1 - dla zademonstrowania użycia tego komponentu Timer - migtimer - potrzebny do zademonstrowania użycia funkcji Windows API FlashWindow 4. Teraz należy dodać elementy menu i nadać odpowiednie wartości właściwościom elementów interfejsu.
W efekcie okno Designera tworzonej aplikacji powinno wyglądać podobnie jak na poniższym zrzucie ekranu: Jak już wcześniej zostało napisane, należy pamiętać o dodawaniu skrótów klawiszowych do elementów menu i podmenu, a także o nadawaniu właściwościom tych elementów wartości zawierających rzetelną informację dla użytkownika. Więcej o dostępności menu i podmenu można przeczytać w rozdziale Dostępne menu i podmenu.
5. Podobnie jak w przypadku menu postępujemy z etykietami i kontrolkami w aplikacji. Edytując ich właściwości, upewniamy się, że właściwość TabIndex etykiety jest dokładnie o 1 mniejsza od właściwości TabIndex kontrolki, którą ta etykieta opisuje. Dokładnie można o tym przeczytać w rozdziale Dostępne Kontrolki i etykiety. Warto zwrócić uwagę na brak etykiety odnoszącej się do grupy przycisków typu Radio (w kodzie źródłowym zmienna o nazwie wyborszkoly). W tym przypadku etykieta ta jest zbędna, ponieważ właściwość Text kontenera zawiera znak & poprzedzający literę W. To daje nam klawisz skrótu i umożliwia szybką nawigację do tej grupy przycisków. Kontener (GroupBox) nie ma dostępnej właściwości UseMnemonic.
6. Do kodu klasy Form1 (plik źródłowy Form1.cs) dopisujemy metodę automatycznie ustawiającą schemat kolorów dla aplikacji w zależności od wartości właściwości SystemInformation.HighContrast (patrz Wysoki kontrast, Automatycznie dostosuj schemat kolorów): private void UstawKolory() if (SystemInformation.HighContrast) //użyj kolorów systemowych ElementKolorowy1.BackColor = SystemColors.Window; ElementKolorowy1.ForeColor = SystemColors.WindowText; ElementKolorowy2.BackColor = SystemColors.Window; ElementKolorowy2.ForeColor = SystemColors.WindowText; ElementKolorowy3.BackColor = SystemColors.Window; ElementKolorowy3.ForeColor = SystemColors.WindowText; //... else //użyj własnych kolorów ElementKolorowy1.BackColor = Color.Green; ElementKolorowy1.ForeColor = Color.Red; ElementKolorowy2.BackColor = Color.White; ElementKolorowy2.ForeColor = Color.black; ElementKolorowy3.BackColor = Color.Blue; ElementKolorowy3.ForeColor = Color.Yellow; //... 7. Tworzymy metodę obsługującą zdarzenie systemowe UserPreferenceChanged (patrz Zdarzenie systemowe UserPreferenceChanged): public void UserPreferenceChanged(object sender, Microsoft.Win32.UserPreferenceChangedEventArgs e) UstawKolory(); 8. Teraz należy zadbać o obsługę Opcji ułatwień dostępu - Wysoki kontrast. W tym celu modyfikujemy kod konstruktora Form1 tak, aby przy uruchomieniu aplikacji ustawienie tej opcji było sprawdzane i stosownie do jego wartości był ustawiany schemat kolorów (patrz Wysoki kontrast). Kod konstruktora powinien wyglądać następująco:
public Form1() InitializeComponent(); UstawKolory(); Microsoft.Win32.SystemEvents.UserPreferenceChanged += new Microsoft.Win32.UserPreferenceChangedEventHandler( this.userpreferencechanged); 9. Następnym krokiem musi być zmodyfikowanie kodu metody Dispose w taki sposób, aby przy zamknięciu aplikacji, poza głównym wątkiem zwalniana była również obsługa zdarzenia systemowego UserPreferenceChanged. Szczegóły zostały przedstawione w rozdziale Metoda Dispose... Oto kod rozbudowanej metody Dispose: 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); 10. Ustawiamy właściwości Icon i Text komponentu NotifyIcon. Szczegóły są opisane w rozdziale Komponent NotifyIcon. 11. Definiujemy obsługę zdarzenia Click dla notifyicon1 przez metodę notifyicon1_click (patrz plik źródłowy Form1.cs). 12. W kodzie klasy Form1 deklarujemy import zewnętrznej funkcji FlashWindow znajdującej się w bibliotece User32.dll (patrz Migocący tytuł okna - Użycie funkcji Windows API FlashWindow). 13. Do klasy Form1 dopisujemy metodę o nazwie mrugaj, aktywującą Timer migtimer (patrz metoda mrugaj w pliku Form1.cs). 14. Edytujemy właściwości Timera migtimer i definiujemy dla niego obsługę zdarzenia Tick (metoda migtimer_tick w pliku Form1.cs). Oto jej kod:
private void migtimer_tick(object sender, EventArgs e) mrugaj(); 15. Kompilujemy i uruchamiamy testową aplikację wciskając kombinację klawiszy Ctrl+F5. Okno aplikacji, które się wyświetli, powinno przypominać poniższy zrzut ekranu: Utworzona w ten sposób aplikacja spełnia wszystkie warunki dostępności i zawiera wszystkie najpotrzebniejsze mechanizmy do tworzenia dostępnych aplikacji. Do tego dokumentu dołączone są pliki źródłowe zawierające kod w języku C#, pliki źródłowe zawierające kod źródłowy w języku C++, kompletny projekt w wersji Visual Studio 2008 i projekt przekonwertowany dla wykorzystania w MS Visual Studio 2013 oraz pliki wykonywalne programów dla Windows 7+ i dla Windows XP.