У меня есть два события щелчка элементов меню в ContextMenuStrip.
Я могу получить SourceControl выбранного элемента контекстного меню, выполнив этот код:
Control c = ((sender as ToolStripItem).Owner as ContextMenuStrip).SourceControl;
Но когда я использую этот код в элементе контекстного меню, который находится на другом уровне, он возвращает null.
Как я могу получить SourceControl в событии щелчка пункта меню второго снимка экрана?
Control CurrentContextMenuOwner
), которое устанавливается при открытииContextMenu
. Подпишитесь на событиеOpened()
и установитеCurrentContextMenuOwner = (sender as ContextMenuStrip).SourceControl;
. В любом изToolStripMenuItems
вы можете использовать ссылкуCurrentContextMenuOwner
для доступа к свойствам элемента управления. Установите дляCurrentContextMenuOwner
значение null в событияхClosing()
илиClosed()
файлаContextMenu
. - person Jimi   schedule 12.11.2018ContextMenuStrip
, которая существовала с самого начала. Вы в основном должны делать то, что предложил @Jimi. Вероятно, вы могли бы унаследоватьContextMenuStrip
и сделать это внутренне, если хотите, но, если это одноразовый вариант, поле - самый простой вариант. - person jmcilhinney   schedule 12.11.2018