如何循环显示菜单条级别中的所有子菜单项

曼兹

我在我一直试图星期如何循环的所有项目SubMenuMenuStrip我的问题是,如果添加一个新商品SubMenu,我必须输入代码以再次使其循环以控制我的物品。基本上,我SubMenu只是为了控制我的物品而循环播放我想要的是循环该MenuStrip级别中的所有项目而不是子菜单级别

这是我的阶层。 在此处输入图片说明

这是我的代码

public void startUpRoleControl()
    {
        loadRoleControl();
        disableAllToolStripItems();

        bool varmasterDropItem = false;
        bool varservicesDropItem = false;
        bool varreportsDropItem = false;
        bool varmaintenanceDropItem = false;
        bool varuseroptionsDropItem = false;

        if (dtDBRoleControl.Rows.Count > 0)
        {
            foreach(DataRow drmaster in dtDBRoleControl.Rows)
            {
                foreach (ToolStripItem masterDropItem in masterToolStripMenuItem.DropDownItems) // use to disable sub items of mastermenu
                {
                    if (masterDropItem.Tag != null)
                    {
                        if (masterDropItem.Tag.ToString() == drmaster["rprevformname"].ToString() && Convert.ToInt32(drmaster["rprevview"]) == 1)
                        {
                            masterDropItem.Visible = true;
                            varmasterDropItem = true;
                            break;
                        }
                    }
                }
            }
            foreach (DataRow drservices in dtDBRoleControl.Rows)
            {
                foreach (ToolStripItem servicesDropItem in servicesToolStripMenuItem.DropDownItems) // use to disable sub items of mastermenu
                {
                    if (servicesDropItem.Tag != null)
                    {
                        if (servicesDropItem.Tag.ToString() == drservices["rprevformname"].ToString() && Convert.ToInt32(drservices["rprevview"]) == 1)
                        {
                            servicesDropItem.Visible = true;
                            varservicesDropItem = true;
                            break;
                        }
                    }
                }
            }
            foreach (DataRow drreports in dtDBRoleControl.Rows)
            {
                foreach (ToolStripItem reportsDropItem in reportsToolStripMenuItem.DropDownItems) // use to disable sub items of mastermenu
                {
                    if (reportsDropItem.Tag != null)
                    {
                        if (reportsDropItem.Tag.ToString() == drreports["rprevformname"].ToString() && Convert.ToInt32(drreports["rprevview"]) == 1)
                        {
                            reportsDropItem.Visible = true;
                            varreportsDropItem=true;
                            break;
                        }
                    }
                }
            }
            foreach (DataRow druseroptions in dtDBRoleControl.Rows)
            {
                foreach (ToolStripItem useroptionsDropItem in reportsToolStripMenuItem.DropDownItems) // use to disable sub items of mastermenu
                {
                    if (useroptionsDropItem.Tag != null)
                    {
                        if (useroptionsDropItem.Tag.ToString() == druseroptions["rprevformname"].ToString() && Convert.ToInt32(druseroptions["rprevview"]) == 1)
                        {
                            useroptionsDropItem.Visible = true;
                            varuseroptionsDropItem = true;
                            break;
                        }
                    }
                }
            }
            foreach (DataRow drmaintenance in dtDBRoleControl.Rows)
            {
                foreach (ToolStripItem maintenanceDropItem in maintenanceToolStripMenuItem.DropDownItems) // use to disable sub items of mastermenu
                {
                    if (maintenanceDropItem.Tag != null)
                    {
                        if (maintenanceDropItem.Tag.ToString() == drmaintenance["rprevformname"].ToString() && Convert.ToInt32(drmaintenance["rprevview"]) == 1)
                        {
                            maintenanceDropItem.Visible = true;
                            varmaintenanceDropItem = true;
                            break;
                        }
                    }
                }
            }



            if (varmasterDropItem == true) // shows master item if there is a item in master that are visible
            {
                masterToolStripMenuItem.Visible = true;
            }
            if (varservicesDropItem == true)// shows services item if there is a item in services that are visible
            {
               servicesToolStripMenuItem.Visible = true;
            }
            if (varreportsDropItem == true)// shows services item if there is a item in services that are visible
            {
                reportsToolStripMenuItem.Visible = true;
            }
            if (varmaintenanceDropItem == true)// shows services item if there is a item in services that are visible
            {
                maintenanceToolStripMenuItem.Visible = true;
            }
            if (varuseroptionsDropItem == true)// shows services item if there is a item in services that are visible
            {
                userOptionsToolStripMenuItem.Visible = true;
            }

        }

如您所见,子菜单越多,我必须控制的代码越多。还有什么其他方法可以循环显示主菜单中的所有项目。我正在使用数据库来控制所有菜单项的可见性。有没有办法使用最小循环语句而不是每个子菜单循环

纳加拉吉·坦特里(Nagaraj Tantri)

好的,这是我可以根据您的图像/示例尝试的方法(这将遍历所有菜单和子菜单项,然后设置其可见性-在Visual Studio 2010中测试):

public void startUpRoleControl()
{
    loadRoleControl();
    disableAllToolStripItems();

    if (dtDBRoleControl.Rows.Count > 0)
    {               
        for (int i = 0; i < menuStrip1.Items.Count; i++ ) //menuStrip1 is the main menu strip which holds the menu items.
        {
            foreach(DataRow drmaster in dtDBRoleControl.Rows)
            {
                ProcessDropDown(menuStrip1.Items[i], drmaster["rprevformname"].ToString(), Convert.ToInt32(drmaster["rprevview"]) );
            }
        }
    }
}

private void ProcessDropDown(ToolStripItem item, string rprevformname, int rprevview)
{
    ToolStripMenuItem menuItem = (ToolStripMenuItem)item; //Type casting from ToolStripItem to ToolStripMenuItem
    if (!menuItem.HasDropDownItems)
        return;
    else
    {
        foreach (ToolStripMenuItem val in menuItem.DropDownItems)
        {
            if (val.HasDropDownItems)
                ProcessDropDown(val, rprevformname, rprevview);
            if (val.Tag != null && val.Tag.ToString() == rprevformname, && rprevview == 1)
            {
                val.Visible = false;
                menuItem.Visible = false;
            }
        }
    }
}

考虑到上述情况,我建议您在确定菜单项对某个值的可见性方面花费过多的开销

更新

只是为了确保不会发生类型转换错误,您可以检查项目是否可转换,例如:

    private void ProcessDropDown(ToolStripItem item)
    {
        ToolStripMenuItem menuItem = item as ToolStripMenuItem; //Type casting from ToolStripItem to ToolStripMenuItem
        if (menuItem == null) 
            return;

        if (!menuItem.HasDropDownItems)
            return;
        else
        {
            foreach (var val in menuItem.DropDownItems)
            {
                ToolStripMenuItem menuTool = val as ToolStripMenuItem;

                if (menuTool == null) 
                    continue;

                if (menuTool.HasDropDownItems)
                    ProcessDropDown(menuTool);
                if (menuTool.Tag != null && menuTool.Tag.ToString() == "nagaraj")
                {
                    menuTool.Text = false;
                    menuItem.Visible = false;
                }
           }
        }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正在显示所有子菜单项

来自分类Dev

将滚动条添加到具有子菜单项的菜单项中,而不隐藏子菜单项

来自分类Dev

选择子菜单项时,它会突出显示父菜单下的所有项目

来自分类Dev

Wagtail - 如何从设置菜单中删除子菜单项

来自分类Dev

BottomAppBar缺少菜单项-未显示所有菜单项

来自分类Dev

如何克隆菜单项的子菜单?

来自分类Dev

如何在此下拉菜单中显示子菜单项

来自分类Dev

如何在菜单项上悬停时显示子菜单项

来自分类Dev

如何在php的父项下显示子菜单项?

来自分类Dev

在NSPopUpButton中显示选定的子菜单项

来自分类Dev

无法在C#中获取Winform中的所有子菜单项

来自分类Dev

使所有菜单项动画化

来自分类Dev

单击其他父菜单项时如何关闭所有其他打开的子菜单?

来自分类Dev

如何在导航栏中居中显示菜单项

来自分类Dev

如何在Action Overflow中不显示菜单项?

来自分类Dev

如何使菜单项在弹性框中水平显示

来自分类Dev

MVVM中的子菜单项选择

来自分类Dev

菜单项悬停时的CSS显示子菜单

来自分类Dev

如何在MySQL中删除带有子级的多级菜单项?

来自分类Dev

仅当在 Wordpress 中有子菜单时才显示菜单项

来自分类Dev

需要向子菜单项添加滚动条

来自分类Dev

如何对齐菜单项中的箭头?

来自分类Dev

菜单栏中未显示的菜单项

来自分类Dev

查找子菜单项

来自分类Dev

如何使我的插件有助于将菜单项从 Eclipse 平台中的现有菜单添加到现有子菜单中?

来自分类Dev

显示选择的菜单项

来自分类Dev

显示点击菜单项

来自分类Dev

如何在wxPython中将子菜单项添加到弹出菜单项?

来自分类Dev

以编程方式将 MS Access DB 文件中的子菜单项添加到菜单条

Related 相关文章

热门标签

归档