C# - 获取ToolStripMenuItem的父级

use*_*ser 12 c# winforms

如何确定ToolStripMenuItem的父级?使用普通的MenuStrip,您只需使用Parent属性,但ToolStripMenuItem似乎没有该属性.我有一个ToolStripDropDownButton,它有几个ToolStripMenuItems,我希望能够以编程方式精确定位那些父类.

Mar*_*all 20

尝试OwnerItem属性.

  • 正如对这个问题的评论......这仅适用于构建为单个单元的菜单.将DropDown属性设置为另一个ContextMenu会"破坏"层次结构,即您只能走到设置的ContextMenu. (7认同)

小智 5

这对我有用:

ToolStripMenuItem menuItem = sender as ToolStripMenuItem;

ToolStrip toolStrip = menuItem.GetCurrentParent();
Run Code Online (Sandbox Code Playgroud)

...从这里,你可以设计一个方法,让你从一个随机的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;
    }
}
Run Code Online (Sandbox Code Playgroud)