Nella mia applicazione C# voglio visualizzare un menu di scelta rapida, ma voglio aggiungere opzioni speciali al menu se il tasto SHIFT viene tenuto premuto quando il contesto il menu è aperto.C# - Rilevamento se il tasto MAIUSC è trattenuto quando si apre un menu di contesto
Attualmente sto usando l'API GetKeyState
per controllare il tasto MAIUSC. Funziona bene sul mio computer ma gli utenti con Windows non inglese dicono che non funziona affatto per loro.
Ho anche letto che nell'API Win32 quando viene aperto un menu di scelta rapida c'è un indicatore che nel menu indica deve mostrare EXTENDEDVERBS
. In C# EventArgs
per l'evento Opening
non contiene (da quello che posso dire) una proprietà che indica EXTENDEDVERBS
o se vengono premuti i tasti di modifica.
Ecco il codice che sto usando ora all'interno del "Opening
" evento:
// 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);
}
Se GetKeyState è il modo giusto di farlo, è il mio codice rilevare correttamente il tasto SHIFT viene premuto?
Purtroppo, padre del ContextMenu nel mio codice è un controllo utente e la proprietà ModifierKeys non è disponibile sia per l'UserContr ol o per l'oggetto ContextMenu. –
@Chris - Come dice Jared, è statico. Ho aggiornato la sua risposta con un collegamento a msdn –
non l'ho notato. Stavo pensando che fosse una proprietà di istanza. Lo proverò. –