В моем приложении C# я хочу отобразить контекстное меню, но я хочу добавить специальные опции в меню, если клавиша SHIFT удерживается, когда контекст открывается меню.C# - Обнаружение, если клавиша SHIFT удерживается при открытии контекстного меню
В настоящее время я использую API GetKeyState
, чтобы проверить ключ SHIFT. Он отлично работает на моем компьютере, но пользователи с неанглийскими Windows говорят, что они вообще не работают для них.
Я также прочитал, что в API Win32 при открытии контекстного меню есть флаг, который указывает, что в меню должно отображаться EXTENDEDVERBS
. В C# EventArgs
для события Opening
не содержит (из того, что я могу сказать) свойства, указывающего EXTENDEDVERBS
, или при нажатии любых клавиш-модификаторов.
Вот код, я использую в настоящее время внутри «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);
}
Если GetKeyState правильный способ сделать это, мой код правильно обнаружения клавиши SHIFT нажата?
к сожалению, родители Контекстные в моем коде является UserControl и свойство ModifierKeys не доступно ни для UserContr ol или для объекта ContextMenu. –
@ Крис - Как говорит Джаред, это статично. Я обновил его ответ ссылкой на msdn –
Я этого не заметил. Я думал, что это свойство экземпляра. Я проверю это. –