Domanda

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

    }
È stato utile?

Soluzione

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).

Altri suggerimenti

You could use something like this

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

Untested but this should get you half way there I hope.

Loop through each ToolStripMenuItem control in the menu strip items and set them to visible. You can add further conditions inside the loop to define which of the menu items should be made visible based on the users choice..

        foreach (ToolStripMenuItem mi in menuStrip1.Items)
        {
            mi.Visible = true;
        }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top