Qual'è la differenza tra the KeyDowne KeyPressevents in .net?
Qual'è la differenza tra the KeyDowne KeyPressevents in .net?
Risposte:
Apparentemente ci sono molti malintesi su questo!
L'unica differenza pratica tra KeyDowne KeyPressè che KeyPressinoltra il carattere risultante dalla pressione di un tasto e viene chiamata solo se ce n'è una.
In altre parole, se premi Asulla tastiera, otterrai questa sequenza di eventi:
Ma se premi Shift+ A, otterrai:
Se tieni premuti i tasti per un po ', otterrai qualcosa del tipo:
Si noti che si KeyPressverifica tra KeyDown e KeyUp, non dopo KeyUp, come hanno affermato molte altre risposte, che KeyPressnon viene chiamato quando un carattere non viene generato e che KeyDownsi ripete mentre si tiene premuto il tasto, anche in contrasto con molte altre risposte .
Esempi di chiavi che non provocano direttamente chiamate a KeyPress:
Esempi di chiavi che fanno seguito a chiamate a KeyPress:
Per i curiosi, KeyDownapprossimativamente è correlato a WM_KEYDOWN, KeyPressa WM_CHARe KeyUpa WM_KEYUP. WM_KEYDOWN può essere chiamato meno del numero di ripetizioni dei tasti, ma invia un conteggio delle ripetizioni che, IIRC, WinForms utilizza per generare esattamente un KeyDown per ripetizione.
ProcessDialogKeye si restituisce false quando keyDataè Keys.Tabo Keys.Shift | Keys.Tab, verrà visualizzato il tasto Tab nel tasto (Attivo) (Giù | Premere | Su).
L'evento KeyPress non viene generato da tasti non di carattere; tuttavia, i tasti non di carattere generano gli eventi KeyDown e KeyUp.
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx
KeyPress viene generato solo da caratteri stampabili e viene generato dopo l'evento KeyDown. A seconda delle impostazioni del ritardo di digitazione, possono esserci più eventi KeyDown e KeyPress ma solo un evento KeyUp.
KeyDown
KeyPress
KeyUp
KeyPress ha un livello di astrazione più elevato rispetto a KeyDown (e KeyUp). KeyDown e KeyUp sono correlati all'hardware: l'azione effettiva di un tasto sulla tastiera. KeyPress è più "Ho ricevuto un personaggio dalla tastiera".
Da MSDN:
Gli eventi chiave si verificano nel seguente ordine:
Inoltre, KeyPress ti dà la possibilità di dichiarare l'azione " gestita " per impedirle di fare qualsiasi cosa.
Handledproprietà non è operativa per KeyUp ( SuppressKeyPressè anche non operativa).
Ho sempre pensato che il keydown avvenisse non appena si preme il tasto down, il keypress è l'azione di premere il tasto e rilasciarlo.
ho trovato questo che dà una spiegazione leggermente diversa: http://bytes.com/topic/net/answers/649131-difference-keypress-keydown-event
Keydown sta premendo il tasto senza rilasciarlo, Keypress è un ciclo completo di press-and-release.
In altre parole, KeyDown + KeyUp = Keypress
Dallo sviluppatore di blog :
Per capire la differenza tra keydown e keypress, è utile capire la differenza tra un "carattere" e una "chiave" . Un "tasto" è un pulsante fisico sulla tastiera del computer mentre un "carattere" è un simbolo digitato premendo un pulsante. In teoria, gli eventi keydown e keyup rappresentano i tasti premuti o rilasciati, mentre l'evento keypress rappresenta un carattere che viene digitato. L'implementazione della teoria non è la stessa in tutti i browser.
Nota: è anche possibile provare Key Event Tester (disponibile sul sito sopra menzionato) per comprendere questo concetto.
KEYUP verrà acquisito una sola volta, al rilascio del tasto premuto, indipendentemente dalla durata della pressione del tasto, quindi se si desidera acquisire tale pressione una sola volta, KEYUP è l'evento adatto da acquisire.
KeyPressevento viene generato per ogni carattere generato dall'input, sia in risposta alla pressione dei tasti fisici sia quando il carattere è il risultato della funzione di autorepeat. Come funziona l'input da tastiera documenta questo comportamento.
Spiegazione più semplice:
Ho tenuto premuto il tasto 'd' per un secondo e poi ho rilasciato.
dddddd
l'evento keydown si è verificato una volta prima che il primo d apparisse sullo schermo, l'evento keypress si è verificato 6 volte e l'evento keyup si è verificato dopo che l'ultimo d è apparso sullo schermo.