2009-02-19 7 views

Odpowiedz

12

Edytuj: Jakimś błędem przeczytałem twoje pytanie, aby sprawdzić poprawną postać. Czy zmodyfikowałeś to? Dodałem opis każdego z nich.

  • KeyCode jest wartością Keys wyliczenie dla klucza, który jest w dół
  • Keydata jest taka sama jak keyCode, ale w połączeniu z dowolnym Shift/Ctrl klucze/ALT
  • KeyValue jest po prostu liczba całkowita reprezentacji KeyCode

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.

+0

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

+0

IsLetterOrDigit działa tylko z ASCII? – Svish

+0

IsLetterOrDigit używa CharUnicodeInfo.GetUnicodeCategory, jeśli znak nie jest łaciński. –

1

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.

+0

Ale KeyCode i KeyData mają ten sam typ, wyliczanie Keys. Nie mogę znaleźć tam żadnego dodatkowego? – Svish

+0

Będzie inaczej, tylko jeśli modyfikator klawiszy (shift/alt/ctrl) jest wyłączony. –

+0

ooh, co jest rzeczą flagową? – Svish

0

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"); 
     } 
    } 
0

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.

+0

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

Powiązane problemy