2013-03-15 33 views
1

我有一个MenuStrip中包括菜单和工具SubMenu在C#中使用WindowsForm?

在“菜单”

我有一个像msO1,msO2,msO3子菜单......,并在“工具”我有一个像MSP1,MSP2,MSP3子菜单.......,

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

在文本框中

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

我的代码是一个硬编码...,如果我有20 subMenus意味着这个代码是不是有帮助任何人有一个想法。 ...,

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

    } 
+1

你的问题是什么? – David 2013-03-15 16:18:55

+0

如果我有20个子菜单意味着这个代码是不是乐于助人的人有一个想法......,因为实在是太漫长......, – user2173324 2013-03-15 16:20:08

+0

所以,你想使代码更清洁和更短? – CathalMF 2013-03-15 16:21:19

回答

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

记住,数组下标从零开始(当你的用户可能会开始counti ng a 1)。

+0

史蒂夫干净多了知道你已经提供了,但我仍然无法看到的例子将采取如果用户在TextBox – MethodMan 2013-03-15 16:42:17

+0

我得到它进入'1,3,5'需要可见多个项目的优势.. ...,你的回答帮助我..., – user2173324 2013-03-15 16:43:16

+0

@Steve你是否缺少这个'string [] splt = txtSelect.Text.Split(',');' – MethodMan 2013-03-15 16:52:20

0

循环遍历菜单条项中的每个ToolStripMenuItem控件并将它们设置为可见。 可以附加额外的条件内循环,以确定哪些菜单项应根据用户的选择变得可见..

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

这对所有人都重新阅读他的问题。如果用户在文本框中输入1,3,5会怎么样?那么你需要做可见/启用只有3项 – MethodMan 2013-03-15 16:28:23

+0

用户可以选择什么都子菜单,他要在文本框中.....,基于文本框我想要显示的子菜单.., – user2173324 2013-03-15 16:28:50

+0

您添加里面的条件循环是否该项目符合用户请求! – CathalMF 2013-03-15 16:32:25

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

未经测试,但这种应该让你在我希望的一半。

+0

什么的FindControl ... – user2173324 2013-03-15 16:30:58

+0

查找管制形式:http://msdn.microsoft.com/en-gb/library/486wc64h。 ASPX – stevepkr84 2013-03-15 16:33:14