In meiner C# -Anwendung möchte ich ein Kontextmenü anzeigen, aber dem Menü spezielle Optionen hinzufügen, wenn die UMSCHALTTASTE während des Kontexts gedrückt gehalten wird Menü ist geöffnet.C# - Ermitteln, ob die UMSCHALTTASTE beim Öffnen eines Kontextmenüs gehalten wird
Ich verwende derzeit die GetKeyState
API, um nach der UMSCHALTTASTE zu suchen. Es funktioniert gut auf meinem Computer, aber Benutzer mit nicht-Englisch Windows sagen, es funktioniert überhaupt nicht für sie.
Ich lese auch, dass in der Win32-API, wenn ein Kontextmenü geöffnet ist, gibt es ein Flag, das im Menü angezeigt werden soll EXTENDEDVERBS
. In C# das EventArgs
für dasEreignis enthält (was ich sagen kann) keine Eigenschaft, die EXTENDEDVERBS
anzeigt, oder wenn irgendwelche Modifizierertasten gedrückt werden.
Hier ist der Code, den ich jetzt in der „Opening
“ -Ereignis bin mit:
// 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);
}
Wenn GetKeyState der richtige Weg ist, es zu tun, ist mein Code richtig die SHIFT-Taste Erkennung gedrückt wird?
Leider der Eltern ContextMenu in meinem Code ist ein Usercontrol und die ModifierKeys Eigenschaft ist nicht verfügbar, entweder für die UserContr ol oder für das ContextMenu-Objekt. –
@Chris - Wie Jared sagt, es ist statisch. Ich aktualisierte seine Antwort mit einem Link zu msdn –
Ich habe das nicht bemerkt. Ich dachte, dass es eine Instanzeigenschaft ist. Ich werde es ausprobieren. –