У меня есть приложение Windows.Worms. В одной из моих форм я отображаю DataGridView с привязанным к нему ContextMenu (не ContextMenuStrip). Для элементов MenuItem в ContextMenu определены ярлыки.
Вот как создается ContextMenu:
Private _contextMenu As _
New ContextMenu( _
New MenuItem() { _
New MenuItem("Item A", AddressOf ItemA_Click, Shortcut.CtrlA) With {.DefaultItem = True}, _
New MenuItem("Item B", AddressOf ItemB_Click, Shortcut.CtrlB), _
New MenuItem("Item C", AddressOf ItemC_Click, Shortcut.CtrlC), _
...
}) _
With {.Name = "MyContextMenu"}
Если мой DataGridView имеет фокус и я нажимаю Ctrl + A вызывается ItemA_Click.
Теперь я хочу, чтобы Ярлык работал для всей моей формы, даже если у DataGridView нет фокуса.
Обратный путь будет легким, мне просто нужно установить KeyPreview формы на true
. Но я хочу передать событие в мой DataGridView.
Я пытался вызвать методы OnKeyDown и OnKeyPress из DataGridView, но оба они не работают. Я не знаю этого, но я предполагаю, что ContextMenu игнорирует события Key ... и подключается к очереди сообщений, но я не знаю, как преобразовать мой System.Windows.Forms.KeyEventArgs в сообщения Windows .
Только двое думают:
- Сфокусируй DataGridView и используй SendKeys как решение только над моим мертвым телом.
- Я не могу извлечь логику из ContextMenu и использовать KeyPreview или что-то в этом роде. как это.