如何在 C# windows 表单应用程序中访问子菜单项内的项目?

How to access items inside sub menu item in C# windows form application in ToolStripMenuItems?

我的 Windows 表单应用程序中有一个 toolstripmenuitem。 我需要访问每个子菜单项并检查是否有特定的菜单项名称可用,如果找到该项目,我想禁用它。 例如:

     Report
         |__Stock
         |     |__Stock Balance
         |     |__Stock Reorder
         |__Sales
               |__Summary

我的代码是这样的。根据我的代码,我可以访问子菜单(股票)并禁用它。但是我无法访问子菜单中的子项(库存余额)。

String specificMenuItemName = "Stock Balance";

                    foreach (ToolStripMenuItem menuItem in MainMenuStrip.Items)
                    {
                        if (menuItem != null)
                        {
                            if (menuItem.HasDropDownItems)
                            {
                                foreach (ToolStripItem subMenuItem in menuItem.DropDownItems)
                                {
                                    if (subMenuItem is ToolStripSeparator)
                                    { }
                                    else
                                    {
                                        if (specificMenuItemName == subMenuItem.Text)
                                        {
                                            subMenuItem.Enabled = false;
                                        }
                                    }
                                }
                            }
                        }
                    }

如何访问股票余额并禁用它?

递归函数遍历每个具有下拉项目的项目,直到找到具有指定名称的项目,怎么样?像这样的东西(快速而肮脏,跳过检查分隔符和类似的东西......):

private static void DisableItem(ToolStripDropDownItem menu, bool enable, string text)
{
    if (!menu.HasDropDownItems)
        if (Equals(menu.Text, text))
            menu.Enabled = enable;
        else
            return;

    foreach(var subItem in menu.DropDownItems)
    {
        var item = subItem as ToolStripDropDownItem;
        if (item == null) continue; 

        if (item.HasDropDownItems)
            DisableItem(item, enable, text);
        if (Equals(item.Text, text))
            item.Enabled = enable;
    }
}