Search code examples
c#arrayssplitsubmenumenustrip

SubMenu in C# using WindowsForm?


I have a menustrip consists of Menu and Tools

in "Menu" i have subMenus like msO1,msO2,msO3......., and on "Tools" i have subMenus like msP1,msP2,msP3.......,

on Form load all the subMenus visible is false..., On button Click user want to select which subMenus he want...,

in the textBox(txtSelect) if user enter 1,3..., he get msO1, msO3.....,

my code is a hardcode..., if i have 20 subMenus means this code is not helpfull anybody have an idea...,

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

    }

Solution

  • Create an array of your MenuStrip

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

    now you could work on the array as a Whole to make visible or not your menus

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

    and your code could be simplified with

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

    Remember, arrays indexes start at zero (while your user will probably start counting a 1).