Как я могу найти, какой элемент я щелкнул правой кнопкой мыши, не создавая ContextMenuStrip для каждого элемента

Я пытаюсь создать контроллер на основе TCP для серверов и виртуальных машин в моем доме, я хочу, чтобы у каждого сервера был выделенный порт, чтобы я мог легко узнать, какой из них какой, поскольку запущено довольно много экземпляров HyperV. Я разработал базовый сервер управления по своему вкусу, но у меня возникли проблемы с ContextMenuStrips.

У меня есть 18 серверов или виртуальных машин, которыми я хочу управлять через свою программу (основная цель — запуск сценариев PowerShell или других рутинных задач на всех машинах одновременно), но я не могу понять эту часть. Каждый из списков портов существует на панели, панель содержит PictureBox и Label. Показанная полоса ContextMenu включена на каждой из панелей, которые охватывают другие элементы. Как мне узнать, какую из панелей я щелкнул правой кнопкой мыши для обновления? Нужно ли мне создавать ContextMenu для каждой панели, просто смотреть на положение указателя при щелчке правой кнопкой мыши и иметь несколько списков, которые наилучшим образом определяют границы, или я просто не знаю лучшего способа сделать это?

Что у меня есть


person Tyson    schedule 26.11.2019    source источник
comment
Получить исходный элемент управления DropDownMenu. Установите текст дочерней метки панели.   -  person Jimi    schedule 26.11.2019
comment
Я столкнулся с проблемой при попытке реализовать тестовый код, который вы предоставили в этом посте. i.imgur.com/1h80Qzr.png Я создал обработчик события Opened для полосы меню. i.imgur.com/tzFazBQ.png Я наполовину понимаю, что происходит с предоставленным вами кодом , собираюсь прочитать документацию и, надеюсь, найти больше понимания   -  person Tyson    schedule 26.11.2019
comment
Вы его только что создали или еще и подписались на него? Если вы установите там точку останова, она сработает?   -  person Jimi    schedule 26.11.2019
comment
Точка останова действительно срабатывает, но я не знаком с тем, что вы подразумеваете под подпиской на нее.   -  person Tyson    schedule 26.11.2019
comment
Если установка точки останова останавливает выполнение кода внутри обработчика (обработчик contextMenuStrip1_Opened), то событие подписывается. Что такое (sender as ContextMenuStrip).SourceControl в этот момент (значение SourceControl)?   -  person Jimi    schedule 26.11.2019
comment
Он содержит {System.Windows.Forms.Panel, BorderStyle: System.Windows.Forms.BorderStyle.None}, когда достигает точки останова   -  person Tyson    schedule 26.11.2019
comment
Дважды проверьте, что вы реализовали из кода, который я связал. Поскольку SourceControl является элементом управления Panel, как вы также подтвердили, он не может быть нулевым в этот момент, если только он не был установлен равным нулю в другом месте. Убедитесь, что у вас не более одного ContextMenuStrip.   -  person Jimi    schedule 26.11.2019
comment
По прихоти я закомментировал настройку нуля при закрытии, и теперь она работает ... Я немного смущен, но большое спасибо: D Я найду способ полностью реализовать это для своих нужд. У тебя прекрасный день, Джими   -  person Tyson    schedule 26.11.2019