using DevExpress.XtraBars; using DevExpress.XtraBars.Ribbon; using DevExpress.XtraEditors; using DevExpress.XtraTab; using DevExpress.XtraTab.ViewInfo; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace DeadFish { public partial class MainForm : DevExpress.XtraBars.Ribbon.RibbonForm { private Dictionary<string, XtraTabPage> TabPageDic = new Dictionary<string, XtraTabPage>(); private string _userName; private List<MenuModel> UserMenuList = null;//用户权限 public MainForm(string userName) { InitializeComponent(); _userName = userName; } private void AddTab(string tabName, string tabText, DevExpress.XtraEditors.XtraForm xtraForm = null, XtraUserControl xtraUserControl = null) { XtraTabPage tabPage; var isTabPageExsit = TabPageDic.TryGetValue(tabName, out tabPage); if (isTabPageExsit)//判断新增的TabPage是否已经存在 { tabControl.SelectedTabPage = tabPage;//设置为选中 return; } XtraTabPage newTabPage = new XtraTabPage(); newTabPage.Name = tabName;//设置新TabPage的Name newTabPage.Text = tabText;//设置新TabPage的标题文本 newTabPage.TooltipTitle = tabName; if (xtraForm != null) { xtraForm.Dock = DockStyle.Fill; xtraForm.FormBorderStyle = FormBorderStyle.None; xtraForm.TopLevel = false; //newForm.Parent = ((XtraTabControl)sender).SelectedTabPage; xtraForm.ControlBox = false; xtraForm.Visible = true; newTabPage.Controls.Add(xtraForm); } if (xtraUserControl != null) { xtraUserControl.Dock = DockStyle.Fill; newTabPage.Controls.Add(xtraUserControl); } TabPageDic.Add(tabName, newTabPage); tabControl.TabPages.Add(newTabPage);//添加 tabControl.SelectedTabPage = newTabPage;//设置为选中 } private void tabControl_CloseButtonClick(object sender, EventArgs e) { ClosePageButtonEventArgs args = (ClosePageButtonEventArgs)e; string sFlag = args.Page.TooltipTitle; XtraTabPage tabPage; var result = TabPageDic.TryGetValue(sFlag, out tabPage); if (result) { tabControl.TabPages.Remove(tabPage); tabPage.Dispose(); TabPageDic.Remove(sFlag);//从字典中移除 } } private void UserBar_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { UserForm userForm = new UserForm(); AddTab(e.Item.Name, e.Item.Caption, userForm); } private void RoleBar_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { RoleForm roleForm = new RoleForm(); AddTab(e.Item.Name, e.Item.Caption, roleForm); } private void MainForm_Load(object sender, EventArgs e) { //如果登录用户为admin则为所有菜单权限,否则为自定义菜单权限 if (_userName == "admin") UserMenuList = MenuAuth.AllMenuAuth; else UserMenuList = MenuAuth.CustomMenuAuth; //设置用户权限 SetUserAuth(); } private void MainForm_FormClosed(object sender, FormClosedEventArgs e) { Process current = Process.GetCurrentProcess(); // 获取当前本地计算机上指定的进程名称的所有进程 Process[] processes = Process.GetProcessesByName(current.ProcessName); foreach (var process in processes) { if (!process.HasExited) process.Kill(); } } #region 权限 /// <summary> /// 设置用户功能权限 /// </summary> public void SetUserAuth() { foreach (RibbonPage page in ribbonControl1.Pages) { page.Visible = false; if (page.Name == null)//未设置name直接隐藏 continue; var menu = UserMenuList.FirstOrDefault(x => x.MenuName == page.Name); //未找到菜单继续循环 if (menu == null) continue; page.Visible = true; //group 二级菜单 foreach (RibbonPageGroup group in page.Groups) { group.Visible = false; if (group.Name == null) continue; if (menu.ChildMenuList == null) continue;//没有下级菜单继续循环 var secondMenu = menu.ChildMenuList.FirstOrDefault(x => x.MenuName == group.Name); if (secondMenu == null) continue; //未找到二级菜单继续循环 group.Visible = true; //group 三级菜单 foreach (var btnItem in group.ItemLinks) { BarButtonItem item = ((BarButtonItemLink)btnItem).Item; item.Visibility = BarItemVisibility.Never; if (item.Name == null) continue; if (secondMenu.ChildMenuList == null) continue;//没有下级菜单继续循环 var ThirdMenu = secondMenu.ChildMenuList.FirstOrDefault(x => x.MenuName == item.Name); if (ThirdMenu == null) continue; //未找到二级菜单继续循环 item.Visibility = BarItemVisibility.Always; } } } } #endregion } }