C# menu动态生成
在权限管理中动态生成菜单的步骤:
1.获取角色对应的菜单集合
2.遍历父菜单生成窗体父菜单
3.遍历子菜单生成窗体对应的子菜单
说明:在生成子菜单的时候要给对应的子菜单绑定事件,事件可以提前定义好,然后直接绑定。
部分代码:
//根据登录用户Id获取角色集合
var roleMenus = RoleMenusBll.GetByRPid((int)Users.URid);
if(roleMenus.Count==0)
{
MessageHelp.PromptMessage("登录用户没有设置任何权限,请联系管理员!");
Close();
}
var parentMeuns = roleMenus.Where(o => o.Menus.MParentID == 0).ToList();
//遍历父角色集合
foreach (var parentMeun in parentMeuns)
{
var parentToolMeun = new ToolStripMenuItem() {Text = parentMeun.Menus.MName};
SetParentMenu(parentToolMeun);
var childMenus = roleMenus.Where(o => o.Menus.MParentID == parentMeun.Menus.Pid);
//遍历子角色结合
foreach (var cm in childMenus)
{
var childToolMenu = new ToolStripMenuItem() {Text = cm.Menus.MName};
SetChildMenu(childToolMenu);
parentToolMeun.DropDownItems.Add(childToolMenu);
}
menuStripMain.Items.Add(parentToolMeun);
}
/// <summary>
/// 设置父菜单信息
/// </summary>
/// <param name="tool"></param>
private void SetParentMenu(ToolStripMenuItem tool)
{
switch (tool.Text)
{
case "系统设置":
tool.Text += "(&S)";
break;
//只给出部分信息
}
}
/// <summary>
/// 设置子菜单信息
/// </summary>
/// <param name="tool"></param>
private void SetChildMenu(ToolStripMenuItem tool)
{
switch (tool.Text)
{
case "角色管理":
tool.Text += "(&R)";
//说明RoleToolMenuItemClick事件是预先定义好的
tool.Click += new EventHandler(RoleToolMenuItemClick);
break;
//给出部分信息
}
}
这个功能很简单,希望对新手有帮助。