C# 在WinForms中访问ToolStripMenuItem子项

C# 在WinForms中访问ToolStripMenuItem子项,c#,winforms,C#,Winforms,好的 我在Winform中创建了一个菜单条,不是动态创建的。当用户拥有权限时,所有这些都是不可见的。我的用户名之一拥有完全权限,。为此,我编写了以下代码 private void menuActive(MenuStrip menus) { foreach (ToolStripMenuItem menu in menus.Items) { menu.Visible = true; for (int i = 0

好的

我在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;                        
          }
     }
}
private void菜单活动(菜单提示菜单)
{
foreach(菜单中的ToolStripMenuItem菜单项)
{
menu.Visible=true;
对于(int i=0;i
但这在菜单项和子菜单项中是可见的,。我的几个childItem菜单有更多的childItem。这意味着,在TsmMaster和tsmregisterMaster中是可见的,但我无法访问RegisterMaster的子项(ClassMaster、division Master…)

见下图

请给出你的建议

尝试使用递归:

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

代码的固定版本

       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);
                }

            }
        }
private void菜单活动(菜单提示菜单)
{
foreach(菜单中的ToolStripMenuItem菜单项)
{
激活项(菜单);
}
}
私有无效激活项(ToolStripMenuItem项)
{
item.Visible=true;
对于(int i=0;i
您能用简单的英语陈述问题吗?使用递归逻辑将解决您的问题…谢谢大家。递归可以解决我的问题。