Hmm, no estoy seguro de cuánto controló el MSDN documentation. Se establece el orden en que los tres eventos ocurren con bastante claridad:
eventos clave se presentan en el siguiente orden:
- KeyDown
- KeyPress
- KeyUp
KeyDown
se genera tan pronto como el usuario presiona una tecla en el teclado, mientras están s hasta sostenerlo.
KeyPress
se establezca para carácter teclas (a diferencia de KeyDown y KeyUp, que también se plantean para las claves no son caracteres) mientras se pulsa la tecla. Este es un evento de "nivel superior" que KeyDown o KeyUp, y como tal, hay diferentes datos disponibles en el EventArgs
.
KeyUp
se genera después de que el usuario suelta una tecla en el teclado.
Generalmente, debe manejar el evento KeyUp
en su aplicación. Las acciones no se deben iniciar en la interfaz de usuario hasta después de el usuario suelta la clave. Y dado que KeyUp
es un evento de nivel inferior a KeyPress
, siempre tendrá mucha información al alcance de la mano sobre la tecla presionada, e incluso funcionará para manejar claves que no son de carácter.
Lo que hay que tener en cuenta sobre todo de estos eventos, sin embargo, es que sólo son planteados por el control que tiene el foco. Eso significa que si un control de botón en su formulario tiene actualmente el foco, ninguno de los eventos de clave para su formulario se levantará. Esto a menudo es confuso para los programadores nuevos en .NET.La mejor manera de manejar esto es por razones imperiosas de ProcessCmdKey
method la forma:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Control | Keys.A))
{
MessageBox.Show("You pressed Ctrl+A!");
}
}
Aunque Reggie no preguntó esto, agregué una respuesta a continuación con ideas sobre cuándo usar KeyDown vs KeyUp. –
La descripción de 'KeyPress' es incorrecta. 'KeyPress' ocurre mientras se presiona la tecla, incluso si nunca se lanza. Ver [respuesta de Cody Gray] (http://stackoverflow.com/a/5871430/1219414). – Juan