在c#中使用WindowsForm的子菜单



我有一个菜单栏,包括菜单和工具

在"菜单"我有子菜单,如msO1,msO2,msO3.......,在"工具",我有子菜单,如msP1,msP2,msP3.......,

on Form load所有可见的子菜单为false…, On按钮点击用户想要选择的子菜单…,

在textBox(txtSelect)如果用户输入1,3…,他得到msO1, msO3.....,

我的代码是硬代码…如果我有20个子菜单意味着这个代码没有帮助,有人有一个想法…

   private void btnSelect_Click_1(object sender, EventArgs e)
    {
        msO1.Visible = false;//msO1 is a submenu
        msO2.Visible = false;
        msO3.Visible = false;
        msP1.Visible = false;
        msP2.Visible = false;
        msP3.Visible = false;
        string word = txtSelect.Text;
        string[] splt = word.Split(',');
        int[] arrayItms = new int[splt.Length];
        for (int x = 0; x < splt.Length; x++)
        {
            arrayItms[x]=Convert.ToInt32(splt[x].ToString());
            if (splt.Length > 0)
            {
                switch (arrayItms[x])
                {
                    case 1:
                        msO1.Visible = true; break;
                    case 2:
                        msO2.Visible = true; break;
                    case 3:
                        msO3.Visible = true; break;
                    case 4:
                        msP1.Visible = true; break;
                    case 5:
                        msP2.Visible = true; break;
                    case 6:
                        msP3.Visible = true; break;
                }
            }
        }
    }

创建菜单栏数组

MenuStrip[] mstrip = new MenuStrip[] 
{
    msO1,msO2, msO3, msP1, msP2, msP3 // add other menus here when needed
};

现在你可以把数组作为一个整体来工作,使你的菜单可见或不可见

   for(int x = 0; x < menus.Length; x++)
      mstrip[x].Visible = false;

和您的代码可以简化为

    for (int x = 0; x < splt.Length; x++)
    {
        int menuIndex;
        if(Int32.TryParse(splt[x], out menuIndex))
        {
            menuIndex--;
            if(menuIndex >= 0 && menuIndex < mstrip.Length)
                mstrip[menuIndex].Visible = true;
       }
    }

请记住,数组的索引从0开始(而您的用户可能会开始计数1)。

你可以这样写

    string word = txtSelect.Text;
    string[] splt = word.Split(',');
    for (int x = 0; x < splt.Length; x++)
    {
       Control myControl1 = FindControl("ms" + splt[x]);
       if ( myControl1 != null )
         (ToolStripMenuItem)myControl1.Visible = true;
    }

未经测试,但我希望这应该能让你完成一半。

遍历菜单条项中的每个ToolStripMenuItem控件并将它们设置为可见。您可以在循环中添加进一步的条件,以根据用户的选择定义哪些菜单项应该显示。

        foreach (ToolStripMenuItem mi in menuStrip1.Items)
        {
            mi.Visible = true;
        }

相关内容

  • 没有找到相关文章

最新更新