Jaka jest różnica między wydarzeniami KeyDowna ?KeyPress.net
Jaka jest różnica między wydarzeniami KeyDowna ?KeyPress.net
Odpowiedzi:
Widocznie istnieje wiele nieporozumień!
Jedyną praktyczną różnicą między KeyDowni KeyPressjest to, że KeyPressprzekazuje postać wynikającą z naciśnięcia klawisza i jest wywoływana tylko wtedy, gdy istnieje.
Innymi słowy, jeśli naciśniesz Ana klawiaturze, otrzymasz następującą sekwencję zdarzeń:
Ale jeśli naciśniesz Shift+ A, otrzymasz:
Jeśli przytrzymasz klawisze przez chwilę, otrzymasz coś takiego:
Zauważ, że KeyPresspojawia się pomiędzy KeyDown i KeyUp, nie po tym KeyUp, jak w wielu innych odpowiedzi stwierdzili, że KeyPressnie jest wywoływana, gdy postać nie jest generowany, a KeyDownpowtarza się, gdy przycisk jest wciśnięty, także w przeciwieństwie do wielu innych odpowiedzi .
Przykłady kluczy, które nie powodują bezpośrednio wywołań KeyPress:
Przykłady kluczy, które powodują wywołania KeyPress:
Dla ciekawskich, z KeyDowngrubsza koreluje z WM_KEYDOWN, KeyPressdo WM_CHARi KeyUpdo WM_KEYUP. WM_KEYDOWN można nazwać mniejszą niż liczba powtórzeń klucza, ale wysyła on liczbę powtórzeń, którą IIRC, WinForms używa do wygenerowania dokładnie jednego KeyDown na powtórzenie.
ProcessDialogKeyi zwrócisz wartość false, gdy keyDatajest Keys.Tablub Keys.Shift | Keys.Tab, zobaczysz klawisz Tab w klawiszu (Wł.) (W dół | Naciśnij | W górę).
Zdarzenie KeyPress nie jest wywoływane przez klucze inne niż znaki; jednak klucze nieznakowe wywołują zdarzenia KeyDown i KeyUp.
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx
KeyPress jest uruchamiany tylko przez znaki do wydrukowania i jest uruchamiany po zdarzeniu KeyDown. W zależności od ustawień opóźnienia pisania może istnieć wiele zdarzeń KeyDown i KeyPress, ale tylko jedno zdarzenie KeyUp.
KeyDown
KeyPress
KeyUp
KeyPress to wyższy poziom abstrakcji niż KeyDown (i KeyUp). KeyDown i KeyUp są związane ze sprzętem: faktyczne działanie klawisza na klawiaturze. KeyPress to więcej: „Otrzymałem znak z klawiatury”.
Z MSDN:
Kluczowe zdarzenia występują w następującej kolejności:
Co więcej, KeyPress daje Ci możliwość zadeklarowania akcji jako „ obsłużonej ”, aby zapobiec jej wykonaniu.
Handledwłaściwość nie działa dla KeyUp ( SuppressKeyPressrównież nie działa).
Zawsze myślałem, że Keydown ma miejsce, gdy tylko naciśniesz klawisz. Naciśnięcie klawisza polega na naciśnięciu klawisza i zwolnieniu go.
znalazłem to, co daje nieco inne wyjaśnienie: http://bytes.com/topic/net/answers/649131-difference-keypress-keydown-event
Keydown naciska klawisz bez jego zwalniania, Keypress to kompletny cykl naciskania i zwalniania.
Innymi słowy, KeyDown + KeyUp = Keypress
Od twórcy blogów :
Aby zrozumieć różnicę między naciśnięciem klawisza a naciśnięciem klawisza, warto zrozumieć różnicę między „postacią” a „klawiszem” . „Klucz” to fizyczny przycisk na klawiaturze komputera, podczas gdy „charakter” to symbol wpisany przez naciśnięcie przycisku. W teorii, keyDown i keyUp wydarzenia stanowią klucze zostanie naciśnięty lub zwolniony, natomiast naciśnięcie klawisza zdarzeń reprezentuje postać jest wpisany. Implementacja teorii nie jest taka sama we wszystkich przeglądarkach.
Uwaga: możesz również wypróbować Key Event Tester (dostępny na wyżej wymienionej stronie), aby zrozumieć tę koncepcję.
KEYUP zostanie przechwycony tylko raz, po zwolnieniu naciśniętego klawisza, niezależnie od tego, jak długo będzie przytrzymany klawisz, więc jeśli chcesz uchwycić takie naciśnięcie tylko raz, KEYUP jest odpowiednim wydarzeniem do przechwycenia.
KeyPressZdarzenie jest wywoływane dla każdego znaku wygenerowanego z wejścia, zarówno w odpowiedzi na naciśnięć klawiszy fizycznych, jak również wtedy, gdy postać jest wynikiem funkcji autorepeat. Jak działa klawiatura, dokumentuje to zachowanie.
Najłatwiejsze wyjaśnienie:
Przytrzymałem klawisz „d” przez sekundę, a następnie zwolniłem.
dddddd
zdarzenie keydown miało miejsce raz przed pojawieniem się pierwszego d na ekranie, zdarzenie keypress nastąpiło 6 razy, a zdarzenie keupown nastąpiło po ostatnim d na ekranie.