1

メニューとツールで構成されるメニューストリップがあります

「メニュー」には、msO1、msO2、msO3.......のようなサブメニューがあり、「ツール」には、msP1、msP2、msP3.......のようなサブメニューがあります。

フォームの読み込み時に表示されるすべてのサブメニューが false...、ボタンをクリックすると、ユーザーは必要なサブメニューを選択したい...、

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 に答える