日期:2014-05-17 浏览次数:20884 次
public void ShowControl(ToolStripItemCollection items) { foreach (ToolStripMenuItem item in items) { MessageBox.Show(item.Text); if (item.DropDownItems.Count > 0) { ShowControl(item.DropDownItems); } } } private void button1_Click(object sender, EventArgs e) { ShowControl(this.menuStrip1.Items); }
------解决方案--------------------
新建一个窗体,添加2个按钮,button1 button2,编写如下代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { MenuStrip ms = new MenuStrip(); ToolStripMenuItem tsmi = new ToolStripMenuItem("视图1"); ToolStripMenuItem tsmi1 = new ToolStripMenuItem("视图1-1"); ToolStripMenuItem tsmi11 = new ToolStripMenuItem("视图1-1-1"); ToolStripMenuItem tsmi12 = new ToolStripMenuItem("视图1-1-2"); ToolStripMenuItem tsmi13 = new ToolStripMenuItem("视图1-1-3"); tsmi1.DropDownItems.AddRange(new ToolStripItem[] { tsmi11, tsmi12, tsmi13 }); ToolStripMenuItem tsmi2 = new ToolStripMenuItem("视图1-2"); ToolStripMenuItem tsmi21 = new ToolStripMenuItem("视图1-2-1"); ToolStripMenuItem tsmi22 = new ToolStripMenuItem("视图1-2-2"); tsmi2.DropDownItems.AddRange(new ToolStripItem[] { tsmi21, tsmi22 }); ToolStripMenuItem tsmi3 = new ToolStripMenuItem("视图1-3"); ToolStripMenuItem tsmi31 = new ToolStripMenuItem("视图1-3-1"); tsmi3.DropDownItems.AddRange(new ToolStripItem[] { tsmi31 }); tsmi.DropDownItems.AddRange(new ToolStripItem[] { tsmi1, tsmi2, tsmi3 }); ms.Items.Add(tsmi); ms.Dock = DockStyle.Top; Controls.Add(ms); MainMenuStrip = ms; } private IEnumerable<ToolStripMenuItem> GetAllMenuItems(ToolStripMenuItem top) { return top.DropDownItems.Cast<ToolStripMenuItem>().SelectMany(x => GetAllMenuItems(x)).Concat(top.DropDownItems.Cast<ToolStripMenuItem>()); } private void button2_Click(object sender, EventArgs e) { foreach (ToolStripMenuItem item in (Controls.OfType<MenuStrip>().FirstOrDefault() ?? new MenuStrip()).Items) { foreach (ToolStripMenuItem subitem in GetAllMenuItems(item).Where(x => x.Text.Contains("3"))) { subitem.Enabled = false; } } } } }
------解决方案--------------------
本程序支持无线递归搜索,你可以尝试再添加更深层次的菜单。
在真实使用中,你可以精确搜索你要的菜单项目,代码如下:
var menu = GetAllMenuItems(Controls.OfType<MenuStrip>().FirstOrDefault().Items.Cast<ToolStripMenuItem>().Where(x => x.Text == "主菜单文本").FirstOrDefault()).Where(x => x.Text == "你要找的菜单的文本").FirstOrDefault();
menu.Visibled = false; //隐藏
menu.Enabled = false; //禁用
menu.DropDownItems.Add(new ToolStripMenuItem("xxx")); //添加子