Определите, на каком элементе управления использовался ContextMenuStrip
у меня есть ContextMenuStrip
это присваивается нескольким различным спискам. Я пытаюсь выяснить, когда ContextMenuStrip
нажали, что ListBox
Он был использован на. Я попробовал код ниже в качестве начала, но он не работает. Элемент sender
имеет правильное значение, но когда я пытаюсь присвоить его menuSubmitted
это null.
private void MenuViewDetails_Click(object sender, EventArgs e)
{
ContextMenu menuSubmitted = sender as ContextMenu;
if (menuSubmitted != null)
{
Control sourceControl = menuSubmitted.SourceControl;
}
}
любая помощь будет большое. Спасибо.
используя помощь ниже, я понял это:
private void MenuViewDetails_Click(object sender, EventArgs e)
{
ToolStripMenuItem menuItem = sender as ToolStripMenuItem;
if (menuItem != null)
{
ContextMenuStrip calendarMenu = menuItem.Owner as ContextMenuStrip;
if (calendarMenu != null)
{
Control controlSelected = calendarMenu.SourceControl;
}
}
}
2 ответа:
на
ContextMenu
:проблема в том, что
sender
параметр указывает на item в контекстном меню, которое было нажато, а не в самом контекстном меню.это простое решение, хотя, потому что каждый
MenuItem
предоставляетGetContextMenu
метод, который скажет вам, чтоContextMenu
содержит этот пункт меню.изменить код на следующий:
private void MenuViewDetails_Click(object sender, EventArgs e) { // Try to cast the sender to a MenuItem MenuItem menuItem = sender as MenuItem; if (menuItem != null) { // Retrieve the ContextMenu that contains this MenuItem ContextMenu menu = menuItem.GetContextMenu(); // Get the control that is displaying this context menu Control sourceControl = menu.SourceControl; } }
на
ContextMenuStrip
:это не меняет вещи немного, если вы используете
ContextMenuStrip
вместоContextMenu
. Эти два элемента управления не связаны друг с другом, и экземпляр одного не может быть приведен к экземпляру другого.как и прежде, item что было нажато по-прежнему возвращается в
старый пост, но в случае, если кто-то вроде меня натыкается на него:
для ContextMenuStrip, выше не работает для меня, но это привело к поиску того, что сделал.
void DeleteMenu_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { ContextMenuStrip menu = sender as ContextMenuStrip; Control sourceControl = menu.SourceControl; MessageBox.Show(sourceControl.Name); }
Это дало мне имя ожидаемого элемента управления. Вы можете ввести проверку и т. д. С помощью операторов if, я просто публикую, чтобы добраться до сути.