1

我有一个由菜单和工具组成的菜单条

在“菜单”中,我有 msO1、msO2、msO3 等子菜单,在“工具”中,我有 msP1、msP2、msP3 等子菜单......

在表单上加载所有可见的子菜单都是假的......,在按钮上单击用户想要选择他想要的子菜单......,

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

    }
4

3 回答 3

1

创建一个 MenuStrip 数组

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

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

于 2013-03-15T16:29:26.733 回答
0

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

        foreach (ToolStripMenuItem mi in menuStrip1.Items)
        {
            mi.Visible = true;
        }
于 2013-03-15T16:23:36.393 回答
0

你可以使用这样的东西

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

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

于 2013-03-15T16:25:48.333 回答