Как определить родительский элемент ToolStripMenuItem? С обычным MenuStrip все, что вам нужно сделать, это использовать свойство Parent, но не похоже, что свойство ToolStripMenuItem имеет это свойство. У меня есть ToolStripDropDownButton, у которого есть пара инструментов ToolStripMenuItems, и я хотел бы иметь возможность точно определить родительскую часть этих программ.
С# - получить родительский элемент ToolStripMenuItem
Ответ 1
Попробуйте OwnerItem свойство.
Ответ 2
Это работает для меня:
ToolStripMenuItem menuItem = sender as ToolStripMenuItem;
ToolStrip toolStrip = menuItem.GetCurrentParent();
... из этого вы можете придумать метод, который приведет вас к случайному инструменту ToolStripMenuItem на самый верхний уровень, например:
public static class ToolStripItemExtension
{
public static ContextMenuStrip GetContextMenuStrip(this ToolStripItem item)
{
ToolStripItem itemCheck = item;
while (!(itemCheck.GetCurrentParent() is ContextMenuStrip) && itemCheck.GetCurrentParent() is ToolStripDropDown)
{
itemCheck = (itemCheck.GetCurrentParent() as ToolStripDropDown).OwnerItem;
}
return itemCheck.GetCurrentParent() as ContextMenuStrip;
}
}
Ответ 3
Попробуйте это.....
ToolStripMenuItem t = (ToolStripMenuItem)sender;
ContextMenuStrip s = (ContextMenuStrip)t.Owner;
MessageBox.Show(s.SourceControl.Name);
Ответ 4
Вот что вы ищете
private void ContextMenuStrip_Opening(object sender, CancelEventArgs e)
{
contextMenuStrip1.Tag = ((ContextMenuStrip)sender).OwnerItem;
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
ToolStripMenuItem senderItem = (ToolStripMenuItem)sender;
var ownerItem = (ToolStripMenuItem)((ContextMenuStrip)senderItem.Owner).Tag;
}