Fizyka szkoła podstawowa
Fizyka: wzory, prawa i teoria. Rozwiązania zadań z omówieniem

Rozwązanie zadania:

Przechwytywanie zdarzeń klawiatury. Kody klawiszy edycyjnych i funkcyjnych

Zdarzenia pochodzące od klawiatury, które możemy przechwycić w dowolnej aplikacji związane są z wciśnięciem dowolnego klawisza, klawisza edycyjnego i zwolnienie dowolnego klawisza. Znajomość kody używanego klawisza pozwala programowo ubogacić komunikację użytkownika z działającym programem. Na przykład reakcja na klawisze funkcyjne F1, F2...itp.

Zdarzenia wysyłane przez klawiaturę obsługiwane są poprzez komunikaty KeyDown, KeyPress, KeyUP. Komunikaty wysyłane są w wyżej podanej kolejności. Każdy z klawiszy ma swój przypisany kod, na przykład klawisz Esc ma kod 27. Klawisz A jako klawisz edycyjny ma znaczenie "A", jego kod ASCII to 65. Gdy traktujemy go jako "a", to kod ASCII wynosi 97

Cel: Napisz aplikację, która zwróci informację o naciśnięciu dowolnego klawisza, klawisza edycyjnego i zwolnieniu dowolnego klawisza.

zdarzenia klawiatury kody klawiszy visual studio c#

Krok 1. Układ komponentów

Na formatce umieścimy poniższe komponenty

  • GroupBox- sztuk 3
  • Label- sztuk 4

keypress visual studio

Komponenty GroupBox posłużą nam w celach estetycznych, zaś komponenty typu Label będą wyświetlać przechwycone komunikaty pochodzące od klawiatury

Krok 2. Przechwytujemy komunikat wciśnięcia klawisza edycyjnego

Klawisze znajdujące sie na klawiaturze podzielone są na klawisze funkcyjne i klawisze edycyjne. Klawisze edycyjne to klawisze alfanumeryczne. Każdy z klawiszy edycyjnych ma przypisany znak kodu ASCII. Wartość tę oraz pozycję (indeks) w zbiorze znaków możemy odczytać. Umiejętność ta może być przydatna w wielu poważniejszych projektach.

Przechwycenie zdarzenia KeyPress (jak i pozostałych) zrealizujemy dla całej tworzonej formatki aplikacji, czyli w klasie Form oprogramujemy zdarzenie KeyPress- musimy odczytać odpowiednie właściwości zwracane przez argument e klasy KeyPressEventArgs

Ciało funkcji Form1_KeyPress wypełnimy poniższym kodem

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
label1.Text = "Naciśnięto klawisz edycyjny: " + e.KeyChar + ". Pozycja znaku ASCII: " + Convert.ToInt16(e.KeyChar) ;
}

Po skompilowaniu projektu powinniśmy zarejestrować wciśnięcie klawisza edycyjnego. Patrz poniższa ilustracja

visual studio keypress

Krok 3. Przechwytujemy zdarzenie wciśnięcia dowolnego klawisza

Przechwycenie zdarzenia KeyDown zrealizujemy analogicznie jak KeyPress z tą różnicą, że będziemy odczytywać odpowiednie właściwości parametru e, ale z klasy KeyEventArgs

void Form1_KeyDown(object sender, KeyEventArgs e)

Ciało funkcji Form1_KeyDown wypełnimy poniższym kodem

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
label2.Text = "Naciśnięto klawisz: " + e.KeyValue.ToString() +" Jego znaczenie: "+ e.KeyCode.ToString();
}

Po kompilacji projektu powinniśmy zarejestrować wciśniecie dowolnego klawisza, w tym klawiszy funkcyjnych

keyDown visual studio

Krok 4. Przechwytujemy zdarzenie zwolnienia dowolnego klawisza

Przechwycenie zdarzenia KeyUp zrealizujemy analogicznie jak KeyDown

void Form1_KeyUp(object sender, KeyEventArgs e)

Ciało funkcji Form1_KeyUp wypełnimy poniższym kodem


private void Form1_KeyUp(object sender, KeyEventArgs e)
{
label3.Text = "Zwolniono klawisz: " + e.KeyValue.ToString() + " Jego znaczenie: " + e.KeyCode.ToString();
}

Po kompilacji projektu powinniśmy zarejestrować zwolnienie dowolnego klawisza

Form1_KeyUp visual studio

Ćwiczenie sprawdzające

Zmodyfikuj aplikacje tak, aby można było ją zamknąć po wciśnięciu klawisza Esc z zabezpieczeniem poprzez wyborem opcji zamykania umieszczonej w oknie dialogowym (patrz poniższa ilustracja)

MessageBox.Show visual studio

W przypadku braku pomysłu możesz skorzystać z poniższego kodu

if (e.KeyValue == 27){
DialogResult wynik = MessageBox.Show("Czy zamknąć aplikację?", "Komunikat", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (wynik == DialogResult.Yes) { this.Close(); } else { return; }
}

Dobra książka

Zobacz przepis na wyśmienite gofry