0

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

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

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

4

1 回答 1

2

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

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;
    }
}
于 2017-08-05T09:31:43.263 回答