我有一个菜单栏,包括菜单和工具
在"菜单"我有子菜单,如msO1,msO2,msO3.......,在"工具",我有子菜单,如msP1,msP2,msP3.......,
on Form load所有可见的子菜单为false…, On按钮点击用户想要选择的子菜单…,
在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;
}
}
}
}
创建菜单栏数组
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;
}
}
请记住,数组的索引从0开始(而您的用户可能会开始计数1)。
你可以这样写
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;
}
未经测试,但我希望这应该能让你完成一半。
遍历菜单条项中的每个ToolStripMenuItem控件并将它们设置为可见。您可以在循环中添加进一步的条件,以根据用户的选择定义哪些菜单项应该显示。
foreach (ToolStripMenuItem mi in menuStrip1.Items)
{
mi.Visible = true;
}