在WinForms中访问ToolStripMenuItem子菜单

5

大家好,

我在Winform中创建了一个菜单条,并非动态生成,当用户具有权限时才可见。我的一个用户名拥有完全的权限。因此,我编写了以下代码。

private void menuActive(MenuStrip menus)
{
     foreach (ToolStripMenuItem menu in menus.Items)
     {
          menu.Visible = true;               
          for (int i = 0; i < menu.DropDown.Items.Count; i++)
          {
               menu.DropDown.Items[i].Visible = true;                        
          }
     }
}

但是这只显示了menuItem和child menuItem,我的一些childItem菜单有更多的childItem。这意味着,在TsmMaster和tsmregisterMaster中可见,但我无法访问registerMasters Childs(ClassMaster,division Master等)。
请参考下面的图片。
请提出您的建议。

你能用简单的英语陈述问题吗? - Amar Palsapure
使用递归逻辑将解决您的问题... - Smack
谢谢大家。递归解决了我的问题。 - Sagotharan
2个回答

3

尝试使用递归:

private void ActivateMenus(ToolStripItemCollection items)
{
    foreach (ToolStripMenuItem item in items)
    {
        item.Visible = true;    
        ActivateMenus(item.DropDown.Items);
    }
}

2
您的代码的修正版本
       private void menuActive(MenuStrip menus)
       {
            foreach (ToolStripMenuItem menu in menus.Items)
            {
                activateItems(menu);
            }
        }

        private void activateItems(ToolStripMenuItem item)
        {
            item.Visible = true;
            for (int i = 0; i < item.DropDown.Items.Count; i++)
            {
                ToolStripItem subItem = item.DropDown.Items[i];
                subItem.Visible = true;
                if (item is ToolStripMenuItem)
                {
                    activateItems(subItem as ToolStripMenuItem);
                }

            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接