#region using System; using System.Collections; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using DevExpress.XtraBars; using DevExpress.XtraBars.Ribbon; ///*************************************************************************/ ///* ///* 文件名 :ToolbarRegister.cs ///* 程序说明 : MDI主窗体上的工具条按钮注册器 ///* 原创作者 :www.csframework.com ///* ///* Copyright 2006-2021 C/S框架网 www.csframework.com ///* ///**************************************************************************/ #endregion namespace CSFrameworkV5.Library.CommonClass { /// /// DevExpress按钮注册器 /// public class DevBarRegister : IToolbarRegister { private Bar _bar; private Form _Owner; public DevBarRegister(Form owner, Bar bar) { _Owner = owner; _bar = bar; } public IButtonInfo CreateButton(string name, string caption, ToolBarGroup group, Bitmap image, Size size, bool beginGroup, bool isLargeButton, OnButtonClick clickEvent) { return new DevBarButtonInfo(_bar.Manager, name, caption, group, image, beginGroup, isLargeButton, clickEvent); } public IButtonInfo CreateListButton(string name, string caption, ToolBarGroup group, Bitmap image, Size size, bool beginGroup, bool isLargeButton, OnButtonClick clickEvent, List subItems) { return new DevBarListButton(_bar.Manager, name, caption, group, beginGroup, isLargeButton, image, clickEvent, subItems); } public IButtonInfo CreateSeperator() { //return new DevBarButtonInfo(_bar.Manager, "btn" + Guid.NewGuid().ToStringEx().Replace("-", ""), "-", null, null); return null; } public void Dispose() { // } public void RegisteButton(IList buttons) { _bar.BeginUpdate(); _bar.ItemLinks.Clear(); BarItemLink link; foreach (IButtonInfo bi in buttons) { var btn = bi.Button as BarItem; link = _bar.ItemLinks.Add(btn); link.BeginGroup = bi.BeginGroup; } _bar.EndUpdate(); } } public class DevRibbonRegister : IToolbarRegister { public const string GROUP_TAG = "功能组动态创建"; public const string GROUP_DEF = "预设功能组"; private Form _Owner; private RibbonControl _RibbonControl; private RibbonPageGroup _RibbonDefaultPageGroup; private RibbonPage _RibbonPage; public DevRibbonRegister(Form owner, RibbonControl ribbonControl, RibbonPage ribbonPage, RibbonPageGroup defaultGroup) { _Owner = owner; _RibbonControl = ribbonControl; _RibbonPage = ribbonPage; _RibbonDefaultPageGroup = defaultGroup; } public IButtonInfo CreateButton(string name, string caption, ToolBarGroup group, Bitmap image, Size size, bool beginGroup, bool isLargeButton, OnButtonClick clickEvent) { return new DevBarButtonInfo(_RibbonControl.Manager, name, caption, group, image, beginGroup, isLargeButton, clickEvent); } public IButtonInfo CreateListButton(string name, string caption, ToolBarGroup group, Bitmap image, Size size, bool beginGroup, bool isLargeButton, OnButtonClick clickEvent, List subItems) { return new DevBarListButton(_RibbonControl.Manager, name, caption, group, beginGroup, isLargeButton, image, clickEvent, subItems); } public IButtonInfo CreateSeperator() { return null; } public void Dispose() { // } public void RegisteButton(IList buttons) { RibbonPageGroup tmpGroup; BarItem btn; //清空动态创建的功能组按钮 ClearRegistedButtons(); foreach (IButtonInfo bi in buttons) { btn = bi.Button as BarItem; btn.RibbonStyle = bi.IsLargeButton ? RibbonItemStyles.Large : RibbonItemStyles.Default; //未指定分组名称,加到预设的分组 if (string.IsNullOrEmpty(bi.GroupName)) { if (_RibbonDefaultPageGroup == null) CreateDefaultPageGroup(); _RibbonDefaultPageGroup.ItemLinks.Add(btn); } else { //根据按钮GroupName属性,将按钮添加到相应的PageGroup tmpGroup = _RibbonControl.GetGroupByName(bi.GroupName); if (tmpGroup != null) { tmpGroup.ItemLinks.Add(btn); } else { var group = new RibbonPageGroup(bi.GroupName); group.ShowCaptionButton = false; group.AllowMinimize = false; group.Tag = GROUP_TAG; group.Name = bi.GroupName; group.ItemLinks.Add(btn); var G = (ToolBarGroup)Enum.Parse(typeof(ToolBarGroup), bi.GroupName); var index = GetGroupIndex(_RibbonPage, G); _RibbonPage.Groups.Insert(index, group); } } } } /// /// 清空动态创建的功能组按钮 /// private void ClearRegistedButtons() { if (_RibbonDefaultPageGroup != null) _RibbonDefaultPageGroup.ItemLinks.Clear(); var list = new List(); foreach (RibbonPageGroup p in _RibbonPage.Groups) if (ConvertEx.ToString(p.Tag) == GROUP_TAG) list.Add(p); for (var i = 0; i <= list.Count - 1; i++) _RibbonPage.Groups.Remove(list[i]); } private void CreateDefaultPageGroup() { _RibbonDefaultPageGroup = new RibbonPageGroup(GROUP_DEF); _RibbonDefaultPageGroup.ShowCaptionButton = false; _RibbonDefaultPageGroup.AllowMinimize = false; _RibbonDefaultPageGroup.Tag = GROUP_TAG; _RibbonDefaultPageGroup.Name = GROUP_DEF; _RibbonDefaultPageGroup.Text = GROUP_DEF; _RibbonPage.Groups.Add(_RibbonDefaultPageGroup); } private int GetGroupEnumID(string groupName) { ToolBarGroup G; if (Enum.TryParse(groupName, out G)) return (int)G; return 0; } private int GetGroupIndex(RibbonPage ribbonPage, ToolBarGroup group) { var groupIndex = (int)group; //当前组的固定序号 var maxID = -1; int tmp; foreach (RibbonPageGroup G in ribbonPage.Groups) { tmp = GetGroupEnumID(G.Name); if (tmp < groupIndex) if (tmp > maxID) maxID = tmp; } return maxID + 1; } } }