Przykładowa dostępna aplikacja w Visual Studio
Transkrypt
Przykładowa dostępna aplikacja w Visual Studio
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.