2011-09-21 14 views
9

¿Cuál es la diferencia exacta entre Keys.Control y Keys.ControlKey/Keys.Shift y Keys.ShiftKey en System.Windows.Forms?¿Cuál es la diferencia exacta entre Keys.Control/Shift y Keys.ControlKey/ShiftKey?

Lo busqué en Google, pero no apareció nada específico, y tampoco parece estar documentado en MSDN.

Personalmente, siempre utilizo Keys.Control/Keys.Shift, porque funciona bien.


Editar: Después de leer la respuesta de KreepN, pensé que si usted nunca tiene que utilizar de control/cambio, ¿por qué están en el marco?

Quiero decir, ni siquiera son las claves físicas, por lo que no veo la razón por la que Microsoft decidió crearlas.

¿Hay circunstancias en las que es mejor usar Control/Shift?

+1

Utiliza Keys.Control para comprobar si el usuario mantiene presionada la tecla Ctrl. Para detectar Ctrl + C, por ejemplo. Utiliza Keys.ControlKey para detectar al usuario presionando la tecla Ctrl. Lo cual es inusual a menos que escribas un juego. –

Respuesta

6

ControlKey y ShiftKey (y el menú - que supondría que habría sido llamado AltKey) representan las claves físicas. En otras palabras, son claves "reales" y se pueden encontrar en la propiedad KeyCode de un objeto KeyEventArgs .

Control, Mayús y Alt, por otro lado, nunca aparecerán en la propiedad KeyCode , pero sus valores se pueden encontrar en la propiedad KeyData. Parece que en realidad NUNCA NECESITA usar estas constantes, porque el marco ya las saca por medio de las propiedades Alt, Control y Shift del objeto KeyEventArgs, pero PUEDE usarlas para probar contra la propiedad KeyData si tu realmente quieres

Source with Examples.

Editar por tu edición:

mirada a los valores que se devuelven cuando se pulsa la tecla "a":

un (no desplazada)/41/41

A (Shift + a)/41/10041

Ctrl + a/41/20041

El "KeyCode" en este caso es = 41 para todos los modificadores. Podría usar esto en el código si todo lo que le importaba era el botón primario presionado, en este caso "a".

Si desea tener una funcionalidad diferente en función de si se ha presionado un modificador, tendrá que ser más específico y hacer referencia al campo "KeyData" y buscar el # que denota un determinado modificador. En este caso, "100" para el cambio y "200" para el control al comienzo del campo.

Eso no quiere decir que no puedas simplemente buscar el "41" al final del campo KeyData, pero nunca he sido de los que se quejan de la conveniencia.

Sería seguro decir que la "diferencia" que está buscando entre ellos en su primera pregunta es que hacen referencia a diferentes campos de propiedades.

Editar para una relevancia adicional: Los valores del modificador de clave combinados con el valor clave se correlacionan directamente con los miembros de enumeración de acceso directo. Por ejemplo: Shortcut.CtrlF8 (0x20077) es lo mismo que Keys.Control | Keys.F8 (0x20000 | 0x77)

Esto puede ser útil al tratar con las propiedades de acceso directo definidas de los elementos del menú.

+0

Excelente respuesta -> Aceptada, pero agregó una parte a la pregunta y aceptará una respuesta que responda a mis dos preguntas. – lesderid

+0

Aclarado y explicado, lo siento sobre eso. – KreepN

Cuestiones relacionadas