我怎么确定一个 ToolStripMenuItem 的父级?对于普通的 MenuStrip,只要使用 Parent 属性就可以了,但似乎 ToolStripMenuItem 没有这个属性。我有一个 ToolStripDropDownButton,里面有一些 ToolStripMenuItems,我想在程序中找到它们的父级。
尝试使用OwnerItem属性。
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;
}
}
试试这个……
ToolStripMenuItem t = (ToolStripMenuItem)sender;
ContextMenuStrip s = (ContextMenuStrip)t.Owner;
MessageBox.Show(s.SourceControl.Name);
这就是你要找的东西
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;
}
ToolStripMenuItem mi = (ToolStripMenuItem)sender;
ToolStripMenuItem miOwnerItem = (ToolStripMenuItem)(mi.GetCurrentParent() as ToolStripDropDown).OwnerItem;
ToolStripMenuItem
类公开了Owner
,OwnerItem
和Parent
属性。这些属性都不能满足您的需求吗?很难理解您想要实现什么以及为什么它不起作用。 - Cody Gray