.net - textbox1 - keyup jquery ejemplos
¿Cuál es la diferencia entre KeyDown y KeyPress en.NET? (10)
¡Aparentemente hay muchos malentendidos sobre esto!
La única diferencia práctica entre KeyDown
y KeyPress
es que KeyPress
transmite el carácter resultante de una pulsación de tecla, y solo se llama si hay uno.
En otras palabras, si presiona A en su teclado, obtendrá esta secuencia de eventos:
- KeyDown: KeyCode = Keys.A, KeyData = Keys.A, Modificadores = Keys.None
- KeyPress: KeyChar = ''a''
- KeyUp: KeyCode = Keys.A
Pero si presiona Shift + A , obtendrá:
- KeyDown: KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, Modificadores = Keys.Shift
- KeyDown: KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = Keys.Shift
- KeyPress: KeyChar = ''A''
- KeyUp: KeyCode = Keys.A
- KeyUp: KeyCode = Keys.ShiftKey
Si mantiene presionadas las teclas durante un tiempo, obtendrá algo como:
- KeyDown: KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, Modificadores = Keys.Shift
- KeyDown: KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, Modificadores = Keys.Shift
- KeyDown: KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, Modificadores = Keys.Shift
- KeyDown: KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, Modificadores = Keys.Shift
- KeyDown: KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, Modificadores = Keys.Shift
- KeyDown: KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = Keys.Shift
- KeyPress: KeyChar = ''A''
- KeyDown: KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = Keys.Shift
- KeyPress: KeyChar = ''A''
- KeyDown: KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = Keys.Shift
- KeyPress: KeyChar = ''A''
- KeyDown: KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = Keys.Shift
- KeyPress: KeyChar = ''A''
- KeyDown: KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = Keys.Shift
- KeyPress: KeyChar = ''A''
- KeyUp: KeyCode = Keys.A
- KeyUp: KeyCode = Keys.ShiftKey
Observe que KeyPress
ocurre entre KeyDown
y KeyUp
, no después de KeyUp
, como muchas de las otras respuestas han indicado, que KeyPress
no se llama cuando un personaje no se genera, y que KeyDown
se repite mientras se mantiene presionada la tecla, también contraria a muchas de las otras respuestas.
Ejemplos de claves que no resultan directamente en llamadas a KeyPress
:
- Shift , Ctrl , Alt
- F1 a F12
- Teclas de flecha
Ejemplos de teclas que dan lugar a llamadas a KeyPress
:
- De la A a la Z , de 0 a 9 , etc.
- Barra espaciadora
- Tab (KeyChar = ''/ t'', ASCII 9)
- Enter (KeyChar = ''/ r'', ASCII 13)
- Esc (KeyChar = ''/ x1b'', ASCII 27)
- Retroceso (KeyChar = ''/ b'', ASCII 8)
Para los curiosos, KeyDown
se correlaciona aproximadamente con WM_KEYDOWN
, KeyPress
con WM_CHAR
y KeyUp
con WM_KEYUP
. WM_KEYDOWN
se puede llamar menos que el número de repeticiones de tecla, pero envía un conteo repetido, que, IIRC, WinForms usa para generar exactamente un KeyDown por repetición.
¿Cuál es la diferencia entre los eventos KeyDown
y KeyPress
en .net
?
Del desarrollador de blogs :
Para entender la diferencia entre la pulsación de teclas y la pulsación de teclas, es útil comprender la diferencia entre un "personaje" y una "tecla" . Una "tecla" es un botón físico en el teclado de la computadora, mientras que un "carácter" es un símbolo escrito al presionar un botón. En teoría, los eventos de keydown y keyup representan teclas presionadas o liberadas, mientras que el evento keypress representa un carácter que se está escribiendo. La implementación de la teoría no es la misma en todos los navegadores.
Nota: También puede probar Key Event Tester (disponible en el sitio mencionado anteriormente) para comprender este concepto.
Desde MSDN:
Los eventos clave ocurren en el siguiente orden:
Además, KeyPress te da la oportunidad de declarar la acción como " handled " para evitar que haga algo.
El evento KeyPress no se genera con claves que no sean caracteres; sin embargo, las claves que no son caracteres plantean los eventos KeyDown y KeyUp.
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx
KEYUP se capturará solo una vez, al soltar la tecla presionada, independientemente de cuánto tiempo se mantenga presionada la tecla, por lo que si desea capturar dicha prensa solo una vez, KEYUP es el evento adecuado para capturar.
KeyPress es un nivel de abstracción más alto que KeyDown (y KeyUp). KeyDown y KeyUp están relacionados con el hardware: la acción real de una tecla en el teclado. KeyPress es más "Recibí un personaje del teclado".
KeyPress solo se dispara con caracteres imprimibles y se dispara después del evento KeyDown. Dependiendo de la configuración de retraso de tipeo, puede haber múltiples eventos KeyDown y KeyPress, pero solo un evento KeyUp.
KeyDown
KeyPress
Tecla Arriba
Keydown está presionando la tecla sin soltarla, Keypress es un ciclo completo de presionar y soltar.
Dicho de otra manera, KeyDown + KeyUp = Keypress
La explicación más fácil:
Mantuve presionada la tecla ''d'' por un segundo y luego la solté.
dddddd
el evento de pulsación sucedió una vez antes de que apareciera la primera d en la pantalla, el evento de pulsación de tecla sucedió 6 veces y el evento de tecla ocurrió después de que d apareció la última en la pantalla.
Siempre he pensado que la pulsación de teclas ocurre tan pronto como presiona la tecla hacia abajo, presionar la tecla es la acción de presionar la tecla y soltarla.
Encontré esto que da una explicación un poco diferente: http://bytes.com/topic/net/answers/649131-difference-keypress-keydown-event