W mojej aplikacji C# chcę wyświetlić menu kontekstowe, ale chcę dodać specjalne opcje do menu, jeśli klawisz SHIFT jest przytrzymywany, gdy kontekst menu jest otwarte.C# - Wykrywanie, czy klawisz SHIFT jest przytrzymywany podczas otwierania menu kontekstowego
Używam obecnie interfejsu API GetKeyState
do sprawdzania klawisza SHIFT. Działa dobrze na moim komputerze, ale użytkownicy z nie-angielskimi Windowsami mówią, że nie działa on dla nich wcale.
Przeczytałem również, że w Win32 API po otwarciu menu kontekstowego flaga wskazująca w menu powinna pokazywać EXTENDEDVERBS
. W języku C# EventArgs
dla zdarzenia nie zawiera (z tego, co mogę powiedzieć) właściwość wskazująca EXTENDEDVERBS
lub jeśli klawisze modyfikujące są naciśnięte.
Oto kod używam teraz wewnątrz „Opening
” wydarzenie:
// 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);
}
Jeśli GetKeyState jest właściwy sposób to zrobić, jest moje kod poprawnie wykrywania klawisz SHIFT jest wciśnięty?
Niestety, rodzicem ContextMenu w moim kodzie jest UserControl, a właściwość ModifierKeys nie jest dostępna dla UserContr ol lub dla obiektu ContextMenu. –
@Chris - Jared mówi, że jest statyczny. Zaktualizowałem jego odpowiedź linkiem do msdn –
Nie zauważyłem tego. Myślałem, że to była właściwość instancji. Wypróbuję to. –