首先向程序中添加一个菜单
通过递归批量给菜单添加相关事件
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace menu
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//根据点击菜单不同做不同的事
AddMenuEvents(menuStrip1.Items);
}
void AddMenuEvents(ToolStripItemCollection c)
{
//遍历菜单项
foreach (ToolStripItem items in c)
{
//如果是菜单而不是分隔线什么其它的东西
if (items is ToolStripItem)
{
//得到其子菜单
ChildMenu((ToolStripMenuItem)items);
}
}
}
void ChildMenu(ToolStripMenuItem menu)
{
//如果有子菜单
if (menu.HasDropDownItems)
{
//遍历所有子菜单
foreach (ToolStripMenuItem m in menu.DropDownItems)
{
//递归确保所有人都能吃到
ChildMenu(m);
}
}
else
{
//如果是最后一级菜单,加事件
menu.Click += new EventHandler(MenuCMD);
}
}
void MenuCMD(object sender, EventArgs e)
{
ToolStripMenuItem ts = (sender as ToolStripMenuItem);
//得到菜单标题
string thecmdstr = ts.Text;
//根据标题做事
switch (thecmdstr)
{
case "A":
label1.Text = "您点了 A 菜单";
break;
case "BBBB":
label1.Text = "您点了 BBBB 菜单";
break;
default:
break;
}
//测试
label2.Text = thecmdstr;
}
}
}
这里我通过 menu.HasDropDownItem 来控制如果用户点击的不是最底层菜单就没有做任何事,大家也可以不这样做。结果如下