请问,如何访问菜单控件的子项的子项
如何访问菜单控件(MenuStrip)的子项的子项的子项.....
每个项的类型是ToolStripMenuItem类,子项又是什么类型的,也就是1级项。2级项又是什么类型,3级呢?
如何把某个2级子项设置为隐藏,比如对于非高级会员就可以隐藏某个2级子项。
[解决办法]
顶个 这个应该能实现你想实现的功能就是有些功能有些用户是不可见的,应该能实现。
[解决办法]
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")); //添加子菜单
... //任何你想要的操作
[解决办法]