循环浏览菜单条中的子项

Mag*_*iam 2 c# menustrip

好吧,我已经尝试过这个

private IEnumerable<ToolStripMenuItem> GetItems(ToolStripMenuItem item)
{
    foreach (ToolStripMenuItem dropDownItem in item.DropDownItems)
    {
        if (dropDownItem.HasDropDownItems)
        {
            foreach (ToolStripMenuItem subItem in GetItems(dropDownItem))
                yield return subItem;
        }
        yield return dropDownItem;
    }
}

private void button2_Click_1(object sender, EventArgs e)
{
    List<ToolStripMenuItem> allItems = new List<ToolStripMenuItem>();
    foreach (ToolStripMenuItem toolItem in menuStrip1.Items)
    {
        allItems.Add(toolItem);
        MessageBox.Show(toolItem.Text);
        allItems.AddRange(GetItems(toolItem));
    }
}
Run Code Online (Sandbox Code Playgroud)

但我只得到File,,EditView

在此输入图像描述

我需要到达Export(见图)及其,并且可能改变例如subitem的可见性。Word

注意:动态form更改menustrip项目这就是我需要循环遍历它们的原因。

Mon*_*nah 5

根据您提供的详细信息,您可以使用 linq 作为

var exportMenu=allItems.FirstOrDefault(t=>t.Text=="Export");
if(exportMenu!=null)
{
    foreach(ToolStripItem item in exportMenu.DropDownItems) // here i changed the var item to ToolStripItem
    {
         if(item.Text=="Word") // as you mentioned in the requirements
              item.Visible=false; // or any variable that will set the visibility of the item
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这对你有帮助

问候