En mi aplicación C# quiero mostrar un menú contextual, pero quiero agregar opciones especiales al menú si la tecla MAYÚS se mantiene presionada cuando el contexto el menú está abierto.C# - Detectando si se mantiene presionada la tecla al abrir un menú contextual
Actualmente estoy usando la API GetKeyState
para comprobar la tecla MAYÚS. Funciona bien en mi computadora, pero los usuarios con Windows que no es inglés dicen que no funciona para ellos.
También leí que en la API de Win32 cuando se abre un menú contextual hay una bandera que indica que en el menú debe mostrar EXTENDEDVERBS
. En C#, el EventArgs
para el evento Opening
no contiene (por lo que puedo decir) una propiedad que indique EXTENDEDVERBS
o si se presionan las teclas modificadoras.
Aquí está el código que estoy usando ahora dentro del evento "Opening
":
// SHIFT KEY is being held down
if (Convert.ToBoolean(GetKeyState(0x10) & 0x1000))
{
_menuStrip.Items.Add(new ToolStripSeparator());
ToolStripMenuItem log = new ToolStripMenuItem("Enable Debug Logging");
log.Click += new EventHandler(log_Click);
log.Checked = Settings.Setting.EnableDebugLogging;
_menuStrip.Items.Add(log);
}
Si GetKeyState es la forma correcta de hacerlo, es mi código de detectar adecuadamente la tecla SHIFT ser presionado?
por desgracia, los padres del ContextMenu en mi código es un control de usuario y la propiedad ModifierKeys tampoco está disponible para el UserContr ol o para el objeto ContextMenu. –
@Chris - Como Jared dice que es estático. Actualicé su respuesta con un enlace a msdn –
. No lo noté. Estaba pensando que era una propiedad de instancia. Lo probaré. –