En un evento KeyDown, tengo KeyEventArgs para trabajar. Tiene (entre otras cosas) estas tres propiedades:C#: En un evento KeyDown, ¿qué debo usar para verificar qué tecla está desactivada?
e.KeyCode
e.KeyData
e.KeyValue
¿Cuál debo usar para qué?
En un evento KeyDown, tengo KeyEventArgs para trabajar. Tiene (entre otras cosas) estas tres propiedades:C#: En un evento KeyDown, ¿qué debo usar para verificar qué tecla está desactivada?
e.KeyCode
e.KeyData
e.KeyValue
¿Cuál debo usar para qué?
Edit: De alguna manera he leído mal su pregunta para incluir la comprobación de un personaje válido. ¿Lo modificaste? He agregado una descripción de cada uno.
Si acaba de necesita t El personaje, probablemente recomendaría usar el evento KeyPress y usar el KeyPressEventArgs. KeyChar propiedad. Luego puede usar Char.IsLetterOrDigit() para averiguar si es un personaje válido.
Alternativamente, puede convertir KeyEventArgs.KeyCode en un char y luego usar Char.IsLetterOrDigit en eso.
Sugeriría usar la propiedad KeyCode
para comparar con la enumeración Keys
para la mayoría de las operaciones. Sin embargo, algunas de las diferencias básicas a continuación pueden ayudarlo a decidir mejor cuál necesita para su situación.
Diferencias:
KeyCode
- Representa el valor Keys
enumeración que representa la llave que se encuentra actualmente en el estado Abajo.
KeyData
- Igual que KeyCode
, excepto que tiene información adicional en la forma de modificadores - Shift/Ctrl/Alt etc.
KeyValue
- El valor numérico de la KeyCode
. utilizando
muy básico de 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");
}
}
Ver my answer a su other question:
Uso caso KeyPressed.
Citando MSDN:
A KeyPressEventArgs especifica el carácter que está compuesta cuando el usuario pulsa una tecla. Por ejemplo, cuando el usuario presiona Shift + K, la propiedad devuelve un KeyChar K. mayúsculas
De esta manera usted no tiene que perder el tiempo con e.KeyCode
, e.KeyData
y e.KeyValue
.
Sí, aceptó su respuesta en la otra pregunta. Pero aquí estaba más buscando una explicación general de sus usos. Por eso lo dividí. Algo que comencé a pensar sobre juuust cuando hice clic en el botón de enviar, entonces, disculpe la confusión =) – Svish
No estoy de acuerdo ... Estás asumiendo que el usuario no quiere detectar ningún modificador y su entrada está limitada al teclado ASCII. – Cerebrus
IsLetterOrDigit solo funciona con ascii? – Svish
IsLetterOrDigit usa CharUnicodeInfo.GetUnicodeCategory si el caracter no es latino. –