#region using System; using System.Drawing; using System.Windows.Forms; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using DevExpress.Utils; using DevExpress.XtraBars; using DevExpress.XtraBars.Ribbon; using DevExpress.XtraEditors; #endregion //new 20200202 namespace CSFrameworkV5.Library.CommonClass { /// /// Ribbon样式的模块展示加载器 /// public class RibbonModuleLoader { private ImageCollection _ilModule32; private ModuleManager _ModuleManager; private RibbonControl _Ribbon; /// /// 构造器 /// /// 模块加载器 /// 主界面的Ribbon组件实例 /// 主界面的模块图标 public RibbonModuleLoader(ModuleManager moduleManager, RibbonControl ribbon, ImageCollection ilModule32) { _ModuleManager = moduleManager; _Ribbon = ribbon; _ilModule32 = ilModule32; } /// /// BarButtonItem的点击事件 /// /// /// private void Btn_ItemClick(object sender, ItemClickEventArgs e) { if (e.Item.Tag != null && e.Item.Tag is ToolStripItem) { var menu = e.Item.Tag as ToolStripItem; menu.PerformClick(); } } /// /// 创建BarButtonItem实例 /// /// /// private BarButtonItem CreateRibbonButtonItem(ToolStripItem item) { var btn = new BarButtonItem(); btn.Name = item.Name; btn.Caption = item.Text; btn.ItemClick += Btn_ItemClick; btn.Tag = item; btn.Glyph = GetButtonImage(item.Name); //按钮图片 _Ribbon.Items.Add(btn); return btn; } /// /// 创建Ribbon样式的模块展示区 /// /// 系统菜单 public void CreateRibbonButtons(MenuStrip moduleMainMenu) { _Ribbon.SelectedPageChanging += Ribbon_SelectedPageChanging; foreach (ToolStripMenuItem moduleTopMenu in moduleMainMenu.Items) { if (!moduleTopMenu.Enabled) continue; //顶级菜单荐是禁用状态表示无权限,不创建 //模块主菜单名称(一级菜单对应模块) var pageModule = new RibbonPage(); pageModule.Text = moduleTopMenu.Text; pageModule.Image = _ilModule32.Images[ moduleMainMenu.Items.IndexOf(moduleTopMenu)]; //图标顺序 pageModule.Tag = moduleTopMenu; //关联菜单标记 _Ribbon.Pages.Add(pageModule); //增加组--红圈容器 var group = new RibbonPageGroup(); pageModule.Groups.Add(group); //递归加载 foreach (ToolStripItem item in moduleTopMenu.DropDownItems) { if (item is ToolStripSeparator) continue; //分隔符菜单项,不加载 if (!item.Enabled) continue; //菜单是禁止使用状态,无权限,不加载 if (moduleTopMenu.Text == "常用功能" && !HasModuleButton(item.Name)) continue; //常用功能特殊处理 //有2级菜单 if (item is ToolStripMenuItem && (item as ToolStripMenuItem).DropDownItems.Count > 0) { //创建2级菜单 var barListItem1 = new BarLinkContainerItem(); barListItem1.Name = item.Name; barListItem1.Caption = item.Text; group.ItemLinks.Add(barListItem1); LoadRibbonSubItems(_Ribbon, barListItem1, item as ToolStripMenuItem); } else //普通菜单 { var btn = CreateRibbonButtonItem(item); group.ItemLinks.Add(btn); } } } } /// /// 获取常用功能的按钮图片 /// /// 功能菜单名称 /// private Image GetButtonImage(string menuName) { //获取按钮实例 var ctl = (MdiTools.MainForm as IMdiForm) .GetModuleMainFormButtonByMenuName("", menuName.Replace("_SHORTCUT_", "")); if (ctl != null) return (ctl as SimpleButton).Image; return null; } /// /// 获取常用功能的按钮实例(null表示常用功能无效链接) /// /// 功能菜单名称 /// private bool HasModuleButton(string menuName) { //获取按钮实例 var ctl = (MdiTools.MainForm as IMdiForm) .GetModuleMainFormButtonByMenuName("", menuName.Replace("_SHORTCUT_", "")); return ctl != null; } /// /// 递归生成BarButtonItem /// /// /// /// private void LoadRibbonSubItems(RibbonControl ribbon, BarLinkContainerItem itemOwner, ToolStripMenuItem menuItem) { foreach (ToolStripItem item in menuItem.DropDownItems) { if (item is ToolStripSeparator) continue; if (!item.Enabled) continue; //菜单是禁止使用状态,无权限 if (item is ToolStripMenuItem && (item as ToolStripMenuItem).DropDownItems.Count > 0) { //创建2级菜单 var barListItem1 = new BarLinkContainerItem(); barListItem1.Name = item.Name; barListItem1.Caption = item.Text; itemOwner.ItemLinks.Add(barListItem1); LoadRibbonSubItems(ribbon, barListItem1, item as ToolStripMenuItem); } else { var btn = CreateRibbonButtonItem(item); itemOwner.ItemLinks.Add(btn); } } } /// /// 激活当前模块 /// /// /// private void Ribbon_SelectedPageChanging(object sender, RibbonPageChangingEventArgs e) { try { var menu = (ToolStripItem)e.Page.Tag; //模块的主菜单 if (menu != null) _ModuleManager.ActiveModule(menu.Text, menu.Name); //激活显示模块 } catch (Exception ex) { Msg.ShowException(ex); } } } }