using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using POSV.Entity; using DevComponents.DotNetBar.Metro; using DevComponents.DotNetBar; using POSV.Utils; using POSV.Template; using POSV.MessageEvent; using POSV.MsgCenter; using POSV.Bean; using POS.Language.Language; namespace POSV.Component { [ToolboxItem(true)] public partial class MenuControl : BaseUserControl { /// /// 数据库的模块数据 /// private List _dataSource = null; /// /// 当前选中的功能块 /// private MetroTileItem _selectedItem = null; private int DefaultWidth = 55; private int DefaultHeight = 50; /// /// 工具栏的宽度 /// private int FixItemWidth = 50; private int FixItemHeight = 0; private int Cols = 8; private int Rows = 5; private Size DefaultItemSize = Size.Empty; public MenuControl() { InitializeComponent(); this.BackColor = Color.Transparent; //订购界面变更通知事件 MsgEvent.RemoveListener(Constant.MENU_CHANGED_NOTIFY , this.MenuChangedEventNotify); MsgEvent.Receive(Constant.MENU_CHANGED_NOTIFY , this.MenuChangedEventNotify); //title修改通知 MsgEvent.RemoveListener(Constant.MENU_TITLE_CHANGED_NOTIFY, this.MenuNotifyChangedEventNotify); MsgEvent.Receive(Constant.MENU_TITLE_CHANGED_NOTIFY, this.MenuNotifyChangedEventNotify); } /// /// title变更通知 /// /// /// protected void MenuNotifyChangedEventNotify(object sender, MsgEventArgs args) { try { var list = args.Data as List; var mainChange = new Dictionary(); foreach (var temp in list) { var data = temp as Tuple; //立即刷新 var keyCode = data.Item1; var keyData = data.Item3; foreach (var control in this.mainPanel.Controls) { if (control is ItemPanel) { var panel = control as ItemPanel; foreach (var icTemp in panel.Items) { var ic = icTemp as ItemContainer; if (ic != null) { foreach (var itemObj in ic.SubItems) { if(itemObj is ItemContainer) { var item = itemObj as ItemContainer; foreach (var subItemObj in item.SubItems) { if(subItemObj is MetroTileItem) { var tempItem = itemObj as MetroTileItem; ApplySubNotify(tempItem, data); } } } else if(itemObj is MetroTileItem) { var item = itemObj as MetroTileItem; ApplySubNotify(item, data); } } } else { if(icTemp is MetroTileItem) { var tempItem = icTemp as MetroTileItem; ApplySubNotify(tempItem, data); } } } } } //记录主菜单通知信息 if (_dataSource != null) { var equalKeyCodeModelList = _dataSource.FindAll(x => x.KeyCode == keyCode.ToString()); foreach (var tempModel in equalKeyCodeModelList) { switch (data.Item2) { case MenuTileNotifyType.数量: var parentId = tempModel.ParentId; var data2 = keyData == "0" ? string.Empty : keyData; if (mainChange.ContainsKey(parentId)) { mainChange[parentId] += data2; } else { mainChange.Add(parentId, data2); } break; } } } } if (mainChange.Keys.Count > 0) { RefreshMainMenuNotify(mainChange); } } catch (Exception ex) { LOGGER.Error(ex, "通知变更发生异常"); } } private void ApplySubNotify(MetroTileItem item, Tuple data) { var keyCode = data.Item1; var keyData = data.Item3; ModuleMenu mo = item.Tag as ModuleMenu; if (mo.KeyCode == data.Item1.ToString()) { switch (data.Item2) { case MenuTileNotifyType.数量: if (keyData == "0" || string.IsNullOrEmpty(keyData)) { //去除显示 item.NotificationMarkText = string.Empty; } else { if (keyData.Length > 2) { item.NotificationMarkSize = 33; } else { item.NotificationMarkSize = 20; } item.NotificationMarkText = keyData; } break; case MenuTileNotifyType.名称: { item.Text = LangProxy.ToLang(keyData); } break; } } } private void RefreshMainMenuNotify(Dictionary mainChange) { foreach (var key in mainChange.Keys) { foreach (var icTemp in menuItemPanel.Items) { var ic = icTemp as ItemContainer; if (ic != null) { foreach (var itemObj in ic.SubItems) { var item = itemObj as MetroTileItem; ModuleMenu mo = item.Tag as ModuleMenu; if (mo.Id == key) { if (string.IsNullOrEmpty(mainChange[key])) { //去除显示 item.NotificationMarkText = string.Empty; } else { item.NotificationMarkText = LangProxy.ToLang("新"); item.NotificationMarkSize = 20; } } } } } } } protected void MenuChangedEventNotify(object sender , MsgEventArgs args) { if(args.Data is List) { var data = args.Data as List; this._dataSource = data; OnResize(EventArgs.Empty); Initialize(); RefreshUi(); } } protected override void OnResize(EventArgs e) { if (this.DesignMode) return; this.Rows = 5; //默认按钮宽度 this.DefaultWidth = (base.Width - 40) / this.Cols - 1; //左侧工具栏的固定宽度40,根据用户容器的大小修正宽度和高度 this.FixItemWidth = base.Width - (this.DefaultWidth * this.Cols); //默认按钮高度 if (this.mainPanel.Visible) { this.DefaultHeight = (base.Height) / this.Rows; this.FixItemHeight = base.Height - this.DefaultHeight * this.Rows; } base.OnResize(e); //是否显示工具区:1-不显示 0-显示 bool hideTools = Global.Instance.GlobalConfigBoolValue(ConfigConstant.SYSTEM_NOT_ALLOW_TOOLS_SHOW , false); if (hideTools) { //默认按钮宽度 this.DefaultWidth = (this.Width) / this.Cols; //左侧工具栏的固定宽度40,根据用户容器的大小修正宽度和高度 this.FixItemWidth = this.Width - (this.DefaultWidth * this.Cols); } this.toolsItemPanel.Visible = !hideTools; //是否显示结账区:1-不显示 0-显示 bool hideBills = Global.Instance.GlobalConfigBoolValue(ConfigConstant.SYSTEM_NOT_ALLOW_BILLS_SHOW , false); this.billItemPanel.Visible = !hideBills; //是否显示主菜单:1-不显示 0-显示 bool hideMenus = Global.Instance.GlobalConfigBoolValue(ConfigConstant.SYSTEM_NOT_ALLOW_MENUS_SHOW , false); if (hideMenus) { this.Rows = 4; //默认按钮高度 this.DefaultHeight = (this.Height) / this.Rows; this.FixItemHeight = this.Height - this.DefaultHeight * this.Rows; } this.menuPanel.Visible = !hideMenus; } private void Initialize() { this.hideItemPanel.Visible = this.menuPanel.Visible; //this.billItemPanel.Visible = this.menuPanel.Visible; //左侧工具栏的固定宽度 this.hideItemPanel.Width = this.toolsItemPanel.Width = this.FixItemWidth - 1; //默认Size this.DefaultItemSize = new Size(DefaultWidth , DefaultHeight); this.keyboardItemPanel.BackgroundStyle.Padding = 0; this.keyboardItemPanel.Width = DefaultWidth * 4; this.menuPanel.Height = DefaultHeight + FixItemHeight; this.hideItemPanel.BackgroundStyle.Padding = 0; this.ButtonItemSimple.TileSize = new Size(FixItemWidth , this.menuPanel.Height); this.billItemPanel.BackgroundStyle.Padding = 0; this.billItemPanel.Height = this.DefaultHeight - 1; if(!this.menuPanel.Visible && this.billItemPanel.Visible) { this.Height -= 5; } } protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (this.DesignMode) return; this.ButtonItemSimple.Tag = new Tuple("Show", this.menuPanel.Height); //注册菜单隐藏和呈现事件 this.ButtonItemSimple.MouseDown += ButtonShowOrHideMouseDown; Initialize(); var resources = new List(); //获取数据库的数据 using (var db = Global.Instance.OpenDataBase) { this._dataSource = db.Query().ToList(); resources = db.Query().ToList(); } this._dataSource.ForEach(x => { var resource = resources.FirstOrDefault(r => r.Id == x.ResourceId); if (resource != null) { x.PermissionCode = string.IsNullOrEmpty(resource.PermissionCode) ? string.Empty : resource.PermissionCode; } }); //如果数据库数据为空 if (this._dataSource == null) { this._dataSource = new List(); } RefreshUi(); } private void ButtonShowOrHideMouseDown(object sender , MouseEventArgs e) { var item = sender as MetroTileItem; var attr = item.Tag as Tuple; if ("Show".Equals(attr.Item1)) { this.mainPanel.Dock = DockStyle.None; this.mainPanel.Visible = false; item.Tag = new Tuple("Hide" , this.Height); } else { this.mainPanel.Dock = DockStyle.Fill; this.mainPanel.Visible = true; item.Tag = new Tuple("Show" , this.menuPanel.Height); } this.Height = attr.Item2; } public void RefreshUi() { //初始化主菜单 BuilderMainMenuItemPanel(null); //初始化结账区 BuilderBillItemPanel(null); //初始化工具区 BuilderToolsItemPanel(null); //初始化键盘区 BuilderKeyboardItemPanel(null); } private Font GetFont(string fontSize) { Font result = Constant.DEFAULT_FONT; ModuleFont font = ModuleFont.默认; Enum.TryParse(fontSize , out font); switch (font) { case ModuleFont.默认: { result = Constant.DEFAULT_FONT; } break; case ModuleFont.正常: { result = Constant.NORMAL_FONT; } break; case ModuleFont.小字: { result = Constant.SMALL_FONT; } break; case ModuleFont.大字: { result = Constant.BIG_FONT; } break; } return result; } /// /// 初始化主菜单 /// private void BuilderMainMenuItemPanel(ModuleMenu module) { this.menuItemPanel.Items.Clear(); ItemContainer ic = new ItemContainer(); ic.MultiLine = false; ic.ItemSpacing = 0; ic.TitleStyle.Class = "MetroTileGroupTitle"; //加载菜单显示区域为主菜单的数据 var lists = this._dataSource.FindAll(x => string.IsNullOrEmpty(x.ParentId) && ModuleArea.主菜单.ToString().Equals(x.Area)); lists.Sort((x , y) => (x.OrderNo.CompareTo(y.OrderNo))); int inx = 0; MetroTileItem first = null; foreach (ModuleMenu entity in lists) { MetroTileItem item = new MetroTileItem(); item.TileStyle.PaddingLeft = item.TileStyle.PaddingRight = -2; item.CheckBehavior = eMetroTileCheckBehavior.LeftMouseButtonClick; item.Checked = false; item.OptionGroup = "MainMenu"; item.TileStyle.Font = GetFont(entity.FontSize); item.TileStyle.TextAlignment = eStyleTextAlignment.Center; item.Text = LangProxy.ToLang( string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias); item.TileSize = new Size(this.DefaultItemSize.Width,this.DefaultItemSize.Height + FixItemHeight); item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3); item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BorderColor = Color.Transparent; item.TileStyle.BorderColor2 = Color.Transparent; this.ChangedCornerType(item , entity); item.Tag = entity; item.MouseDown += OnMainControlMouseDown; item.CheckedChanged += OnMainControlCheckedChanged; if (module != null && module.Id.Equals(entity.Id)) { this._selectedItem = item; } //保留第一项的选择机会 if (first == null) { first = item; } ic.SubItems.Add(item); inx++; } this.menuItemPanel.Items.Add(ic); this.menuItemPanel.Invalidate(); //没有匹配到具体的模块,将第一个主菜单选中 if (this._selectedItem == null) { this._selectedItem = first; } if (this._selectedItem != null) { this._selectedItem.Checked = true; //当前选择的模块为父节点,构建二级菜单 BuilderSubMenuItemPanel(this._selectedItem.Tag as ModuleMenu); } //修正隐藏功能按钮外观 this.ChangedCornerType(this.ButtonItemSimple, this._selectedItem.Tag as ModuleMenu); } private void OnMainControlCheckedChanged(object sender , EventArgs e) { MetroTileItem item = (MetroTileItem)sender; var entity = item.Tag as ModuleMenu; if (item.Checked) { item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color2); item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color2); } else { item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1); } } private void BuilderSubMenuItemPanel(ModuleMenu parent) { var layout = (ModuleLayout)parent.Layout; switch (layout) { case ModuleLayout.清新布局: { FreshLayoutSubMenuItemPanel(parent); } break; case ModuleLayout.经典布局: { ClassicLayoutSubMenuItemPanel(parent); } break; case ModuleLayout.自定义布局: default: { DefaultLayoutSubMenuItemPanel(parent); } break; } } private void ClassicLayoutSubMenuItemPanel(ModuleMenu parent) { this.subMenuItemPanel.Items.Clear(); //当前模块下已经选择功能 var lists = this._dataSource.FindAll(x => x.ParentId == parent.Id); lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo))); int inx = 0; ItemContainer container = new ItemContainer(); container.BackgroundStyle.Class = "MetroTileGroupTitle"; container.MultiLine = true; container.ItemSpacing = 0; var items = new List(); foreach (ModuleMenu entity in lists) { MetroTileItem item = new MetroTileItem(); item.TileStyle.PaddingLeft = item.TileStyle.PaddingRight = -2; item.OptionGroup = "SubMenu"; item.TileStyle.Font = GetFont(entity.FontSize); item.TileStyle.TextAlignment = eStyleTextAlignment.Center; item.Text = LangProxy.ToLang( string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias); item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3); item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BorderColor = Color.Transparent; item.TileStyle.BorderColor2 = Color.Transparent; this.ChangedCornerType(item , entity); item.Tag = entity; switch (inx++) { case 0: { item.TileSize = new System.Drawing.Size(DefaultWidth * 2, DefaultHeight * 2); items.Add(item); } break; case 1: case 2: case 3: case 4: { item.TileSize = this.DefaultItemSize; if ((entity.OrderNo) % 2 == 0) { item.TileSize = new Size(this.DefaultItemSize.Width - 2, this.DefaultItemSize.Height); } container.SubItems.Add(item); if (container.SubItems.Count == 1) { container.FixedSize = new System.Drawing.Size(DefaultWidth * 2 - 2, DefaultHeight * 2); items.Add(container); } } break; case 5: { item.TileSize = new System.Drawing.Size(DefaultWidth * 2, DefaultHeight); items.Add(item); } break; default: { item.TileSize = this.DefaultItemSize; if ((entity.OrderNo) % 7 == 0 || (entity.OrderNo) % 11 == 0) { item.TileSize = new Size(this.DefaultItemSize.Width - 2, this.DefaultItemSize.Height); } items.Add(item); } break; } item.MouseDown += OnMainControlMouseDown; } if (items.Count > 0) { this.subMenuItemPanel.Items.AddRange(items.ToArray()); } this.subMenuItemPanel.Invalidate(); } private void FreshLayoutSubMenuItemPanel(ModuleMenu parent) { this.subMenuItemPanel.Items.Clear(); //当前模块下已经选择功能 var lists = this._dataSource.FindAll(x => x.ParentId == parent.Id); lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo))); int inx = 0; ItemContainer container = new ItemContainer(); container.BackgroundStyle.Class = "MetroTileGroupTitle"; container.MultiLine = true; container.ItemSpacing = 0; var items = new List(); foreach (ModuleMenu entity in lists) { MetroTileItem item = new MetroTileItem(); item.TileStyle.PaddingLeft = item.TileStyle.PaddingRight = -2; item.OptionGroup = "SubMenu"; item.TileStyle.Font = GetFont(entity.FontSize); item.TileStyle.TextAlignment = eStyleTextAlignment.Center; item.Text = LangProxy.ToLang(string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias); item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3); item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BorderColor = Color.Transparent; item.TileStyle.BorderColor2 = Color.Transparent; this.ChangedCornerType(item , entity); item.Tag = entity; switch (inx++) { case 0: { item.TileSize = new System.Drawing.Size(DefaultWidth * 2, DefaultHeight * 2); items.Add(item); } break; case 1: case 2: { item.TileSize = new System.Drawing.Size(DefaultWidth * 2, DefaultHeight); if ((entity.OrderNo) % 2 == 0) { item.TileSize = new System.Drawing.Size(DefaultWidth * 2 - 2, DefaultHeight); } container.SubItems.Add(item); if (container.SubItems.Count == 1) { container.FixedSize = new System.Drawing.Size(DefaultWidth * 2 - 2, DefaultHeight * 2); items.Add(container); } } break; case 3: default: { item.TileSize = new System.Drawing.Size(DefaultWidth * 2, DefaultHeight); if ((entity.OrderNo) % 4 == 0 || (entity.OrderNo) % 6 == 0) { item.TileSize = new Size(DefaultWidth * 2 - 2, DefaultHeight); } items.Add(item); } break; } item.MouseDown += OnMainControlMouseDown; } if (items.Count > 0) { this.subMenuItemPanel.Items.AddRange(items.ToArray()); } this.subMenuItemPanel.Invalidate(); } private void DefaultLayoutSubMenuItemPanel(ModuleMenu parent) { this.subMenuItemPanel.Items.Clear(); ItemContainer ic = new ItemContainer(); ic.MultiLine = true; ic.ItemSpacing = 0; ic.TitleStyle.Class = "MetroTileGroupTitle"; //当前模块下已经选择功能 var lists = this._dataSource.FindAll(x => x.ParentId == parent.Id); lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo))); foreach (ModuleMenu entity in lists) { MetroTileItem item = new MetroTileItem(); item.TileStyle.PaddingLeft = item.TileStyle.PaddingRight = -2; item.OptionGroup = "SubMenu"; item.TileStyle.Font = GetFont(entity.FontSize); item.TileStyle.TextAlignment = eStyleTextAlignment.Center; item.Text = LangProxy.ToLang(string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias); item.TileSize = this.DefaultItemSize; if ((entity.OrderNo + 1) % 4 == 0) { item.TileSize = new Size(this.DefaultItemSize.Width - 2, this.DefaultItemSize.Height); } item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3); item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BorderColor = Color.Transparent; item.TileStyle.BorderColor2 = Color.Transparent; this.ChangedCornerType(item , entity); item.Tag = entity; item.MouseDown += OnMainControlMouseDown; ic.SubItems.Add(item); } this.subMenuItemPanel.Items.Add(ic); this.subMenuItemPanel.Invalidate(); } private void ChangedCornerType(MetroTileItem item , ModuleMenu entity) { item.TileStyle.BorderWidth = 1; item.TileStyle.CornerDiameter = 6; //显示样式 var value = Global.Instance.GlobalConfigStringValue(ConfigConstant.SYSTEM_SHOW_MENU_STYLE , CornerType.圆角.ToString()); CornerType cornerType = CornerType.默认; Enum.TryParse(value , out cornerType); switch (cornerType) { case CornerType.默认: { item.TileStyle.CornerType = eCornerType.Square; } break; case CornerType.圆角: { item.TileStyle.CornerType = eCornerType.Rounded; item.TileStyle.BorderColor = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BorderColor2 = ColorTranslator.FromHtml(entity.Color1); } break; case CornerType.棱角: { item.TileStyle.CornerType = eCornerType.Diagonal; item.TileStyle.BorderColor = Color.Transparent;// Translator.FromHtml(entity.Color1); item.TileStyle.BorderColor2 = Color.Transparent; //Translator.FromHtml(entity.Color1); } break; } } /// /// 初始化结账区 /// private void BuilderBillItemPanel(ModuleMenu module) { this.billItemPanel.Items.Clear(); ItemContainer ic = new ItemContainer(); ic.MultiLine = false; ic.ItemSpacing = 0; ic.TitleStyle.Class = "MetroTileGroupTitle"; //加载菜单显示区域为结账区的数据 var lists = this._dataSource.FindAll(x => !string.IsNullOrEmpty(x.ParentId) && ModuleArea.结账区.ToString().Equals(x.Area)); lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo))); foreach (ModuleMenu entity in lists) { MetroTileItem item = new MetroTileItem(); item.TileStyle.PaddingLeft = item.TileStyle.PaddingRight = -2; item.CheckBehavior = eMetroTileCheckBehavior.LeftMouseButtonClick; item.Checked = false; item.OptionGroup = "Bill"; item.TileStyle.Font = GetFont(entity.FontSize); item.TileStyle.TextAlignment = eStyleTextAlignment.Center; item.Text = LangProxy.ToLang(string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias); item.TileSize = this.DefaultItemSize; item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3); item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BorderColor = Color.Transparent; item.TileStyle.BorderColor2 = Color.Transparent; this.ChangedCornerType(item , entity); item.Tag = entity; item.MouseDown += OnMainControlMouseDown; ic.SubItems.Add(item); if (module != null && module.Id.Equals(entity.Id)) { item.Checked = true; } } this.billItemPanel.Items.Add(ic); this.billItemPanel.Invalidate(); } /// /// 初始化工具区 /// private void BuilderToolsItemPanel(ModuleMenu module) { this.toolsItemPanel.Items.Clear(); ItemContainer ic = new ItemContainer(); ic.MultiLine = true; ic.ItemSpacing = 0; ic.TitleStyle.Class = "MetroTileGroupTitle"; //加载菜单显示区域为工具区的数据 var lists = this._dataSource.FindAll(x => !string.IsNullOrEmpty(x.ParentId) && ModuleArea.工具区.ToString().Equals(x.Area)); lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo))); foreach (ModuleMenu entity in lists) { if (entity.OrderNo == 4) break; this.ButtonItemSimple.TileSize = new Size(FixItemWidth, this.menuPanel.Height); this.ButtonItemSimple.TileStyle.Font = GetFont(entity.FontSize); this.ButtonItemSimple.TileStyle.TextAlignment = eStyleTextAlignment.Center; this.ButtonItemSimple.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3); this.ButtonItemSimple.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1); this.ButtonItemSimple.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1); this.ButtonItemSimple.TileStyle.BorderColor = Color.Transparent; this.ButtonItemSimple.TileStyle.BorderColor2 = Color.Transparent; MetroTileItem item = new MetroTileItem(); item.TileStyle.PaddingLeft = item.TileStyle.PaddingRight = -2; item.CheckBehavior = eMetroTileCheckBehavior.LeftMouseButtonClick; item.Checked = false; item.OptionGroup = "Tools"; item.TileStyle.Font = GetFont(entity.FontSize); item.TileStyle.TextAlignment = eStyleTextAlignment.Center; item.Text = LangProxy.ToLang(string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias); item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3); item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BorderColor = Color.Transparent; item.TileStyle.BorderColor2 = Color.Transparent; item.TileSize = new Size(FixItemWidth , DefaultHeight); this.ChangedCornerType(item , entity); item.Tag = entity; item.MouseDown += OnMainControlMouseDown; ic.SubItems.Add(item); if (module != null && module.Id.Equals(entity.Id)) { item.Checked = true; } } this.toolsItemPanel.Items.Add(ic); this.toolsItemPanel.Invalidate(); } /// /// 初始化键盘区 /// private void BuilderKeyboardItemPanel(ModuleMenu module) { this.keyboardItemPanel.Items.Clear(); ItemContainer ic = new ItemContainer(); ic.MultiLine = true; ic.ItemSpacing = 0; ic.TitleStyle.Class = "MetroTileGroupTitle"; //加载菜单显示区域为结账区的数据 var lists = this._dataSource.FindAll(x => !string.IsNullOrEmpty(x.ParentId) && ModuleArea.键盘区.ToString().Equals(x.Area)); lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo))); foreach (ModuleMenu entity in lists) { MetroTileItem item = new MetroTileItem(); item.TileStyle.PaddingLeft = item.TileStyle.PaddingRight = -2; item.CheckBehavior = eMetroTileCheckBehavior.LeftMouseButtonClick; item.Checked = false; item.TileStyle.Font = GetFont(entity.FontSize); item.TileStyle.TextAlignment = eStyleTextAlignment.Center; item.Text = LangProxy.ToLang(string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias); item.TileSize = this.DefaultItemSize; item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3); item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1); item.TileStyle.BorderColor = Color.Transparent; item.TileStyle.BorderColor2 = Color.Transparent; this.ChangedCornerType(item , entity); item.Tag = entity; item.MouseDown += OnMainControlMouseDown; //item.Click += OnMainControlItemClick; ic.SubItems.Add(item); if (module != null && module.Id.Equals(entity.Id)) { item.Checked = true; } } this.keyboardItemPanel.Items.Add(ic); this.keyboardItemPanel.Invalidate(); } public event MenuEventHandler MenuMouseDown; protected virtual void OnMenuMouseDown(MenuEventArgs e) { MenuMouseDown?.Invoke(this , e); } private void OnMainControlMouseDown(object sender , MouseEventArgs e) { MetroTileItem item = (MetroTileItem)sender; item.Checked = false; var module = item.Tag as ModuleMenu; ModuleArea area = ModuleArea.主菜单; Enum.TryParse(module.Area , out area); switch (area) { case ModuleArea.主菜单: { item.Checked = true; //当前选择的模块为父节点,构建二级菜单 BuilderSubMenuItemPanel(module); //请求title变更通知 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, Operate = MsgEntityOperate.请求 }); } break; default: { this.OnMenuMouseDown(new MenuEventArgs(module.KeyCode , module.KeyData , module)); } break; } } } public delegate void MenuEventHandler(object sender , MenuEventArgs e); public class MenuEventArgs : EventArgs { public readonly string KeyCode; public readonly object KeyData; public readonly string PermissionCode; public readonly ModuleMenu ModuleMenu; public MenuEventArgs(string keyCode,object keyData,ModuleMenu moduleMenu) { this.KeyCode = keyCode; this.KeyData = keyData; this.ModuleMenu = moduleMenu; this.PermissionCode = moduleMenu == null ? string.Empty : moduleMenu.PermissionCode; } /// /// /////////////////////////////快捷菜单使用/////////////////////////////////////// /// public readonly object Target; public readonly int Index; public readonly ShortcutMenu ShortcutMenu; public MenuEventArgs(object sender ,int index, string keyCode , object keyData , ShortcutMenu shortcutMenu) { this.KeyCode = keyCode; this.KeyData = keyData; this.Target = sender; this.Index = index; this.ShortcutMenu = shortcutMenu; this.PermissionCode = shortcutMenu == null ? string.Empty : shortcutMenu.PermissionCode; } } }