Получите SourceControl моего ContextMenuStrip, когда я использую сочетание клавиш - PullRequest
3 голосов
/ 14 апреля 2011

У меня есть один ContextMenuStrip, прикрепленный к двум элементам управления (DataGridView).
В событии ToolStripMenuItem, мне удается получить исходный вызывающий абонент (DataGridView) с этим кодом:

var menu = (ToolStripDropDownItem)sender;
var strip = (ContextMenuStrip)menu.Owner;
var dgv = (DataGridView)strip.SourceControl;  

Работает довольно хорошо, когда я нажимаю на ToolStripMenuItem.
Но когда я использую клавишу сортировки, связанную с ToolStripMenuItem, полоса. SourceControl возвращает ноль.
Кто-нибудьзнаете почему?

1 Ответ

4 голосов
/ 14 апреля 2011

Свойство 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
    //...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...