W zdarzeniu KeyDown mam KeyEventArgs do pracy. Ma (między innymi) te trzy właściwości:C#: W zdarzeniu KeyDown, co powinienem użyć, aby sprawdzić, który klawisz jest wyłączony?
e.KeyCode
e.KeyData
e.KeyValue
Który z nich powinno się używać na co?
W zdarzeniu KeyDown mam KeyEventArgs do pracy. Ma (między innymi) te trzy właściwości:C#: W zdarzeniu KeyDown, co powinienem użyć, aby sprawdzić, który klawisz jest wyłączony?
e.KeyCode
e.KeyData
e.KeyValue
Który z nich powinno się używać na co?
Edytuj: Jakimś błędem przeczytałem twoje pytanie, aby sprawdzić poprawną postać. Czy zmodyfikowałeś to? Dodałem opis każdego z nich.
Jeśli potrzebujesz po prostu on postać, prawdopodobnie zaleciłbym użycie zdarzenia KeyPress i użycie KeyPressEventArgs. Właściwość KeyChar. Następnie możesz użyć Char.IsLetterOrDigit(), aby sprawdzić, czy jest to poprawna postać.
Ewentualnie możesz rzucić KeyEventArgs.KeyCode w char, a następnie użyć Char.IsLetterOrDigit na tym.
Proponuję użyć właściwości KeyCode
do sprawdzenia względem wyliczenia Keys
dla większości operacji. Jednak niektóre z podstawowych różnic poniżej pomogą ci lepiej zdecydować, który z nich potrzebujesz w danej sytuacji.
Różnice:
KeyCode
- Reprezentuje wartość Keys
wyliczenia, który reprezentuje przycisk, który jest obecnie w stanie Downa.
KeyData
- Tak samo jak KeyCode
, oprócz tego, że posiada dodatkowe informacje w postaci modyfikatorów - Shift/Ctrl/Alt itp
KeyValue
- wartość liczbową KeyCode
.
Bardzo prosty korzystania z KeyDown
private void tbSomeText_KeyDown (object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.B && e.Modifiers != Keys.Shift) {
MessageBox.Show("You Pressed b");
}
else if (e.KeyCode == Keys.A && e.Modifiers == Keys.Shift) {
MessageBox.Show("You Pressed Shift+A");
}
}
Zobacz my answer do swojej other question:
użyć zdarzenia KeyPressed.
Cytowanie MSDN:
A KeyPressEventArgs określa postać, która składa się, gdy użytkownik naciśnie klawisz. Na przykład, gdy użytkownik naciśnie klawisz Shift + K, właściwość KeyChar zwraca wielką K.
W ten sposób nie trzeba poeksperymentować z e.KeyCode
, e.KeyData
i e.KeyValue
.
Tak, przyjąłem twoją odpowiedź w drugim pytaniu. Ale tutaj bardziej szukałem ogólnego wyjaśnienia ich zastosowań. Właśnie dlatego podzieliłem to. Coś, o czym pomyślałem, gdy kliknąłem przycisk przesyłania, więc przepraszam za zamieszanie =) – Svish
Nie zgadzam się ... Zakładasz, że użytkownik nie chce wychwycić żadnych modyfikatorów, a jego dane wejściowe są ograniczone do klawiatury ASCII. – Cerebrus
IsLetterOrDigit działa tylko z ASCII? – Svish
IsLetterOrDigit używa CharUnicodeInfo.GetUnicodeCategory, jeśli znak nie jest łaciński. –