Получить SourceControl моего ContextMenuStrip, когда я использую сочетание клавиш
У меня есть один ContextMenuStrip
прикреплен к двум элементам управления (DataGridView
).
в ToolStripMenuItem
нажмите событие, мне удается получить оригинальный вызывающий DataGridView
) с этим кодом:
var menu = (ToolStripDropDownItem)sender;
var strip = (ContextMenuStrip)menu.Owner;
var dgv = (DataGridView)strip.SourceControl;
Это работает довольно хорошо, когда я нажимаю на мой ToolStripMenuItem
,
Но когда я использую клавишу сортировки, связанную с ToolStripMenuItem
, полоса.SourceControl
вернуть ноль.
Кто-нибудь знает почему?
1 ответ
Свойство SourceControl показывает элемент управления, который вызвал открытие ContextMenuStrip. Поскольку в этом случае ContextMenuStrip не отображается, для его открытия не используется элемент управления, поэтому свойство имеет значение null.
Это свойство лучше использовать в контексте события открытия. Смотрите ContextMenuStrip.SourceControl.
Обновление. Один из способов выяснить, какой DataGridView был предполагаемым получателем щелчка ToolStripMenuItem, состоит в том, чтобы увидеть, какой из них имеет фокус:
var dgv = this.ActiveControl as DataGridView;
if ( dgv != null) // make sure to check for null before trying to use this var
//...