在權限管理中動態生成菜單的步驟:
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;
//給出部分信息
}
}
這個功能很簡單,希望對新手有幫助。