using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using PaintDotNet.Base.SettingModel; using PaintDotNet.Base.CommTool; using System.IO; namespace PaintDotNet.Instrument.CustomInterface { internal class ShortKeys : UserControl { private AppWorkspace appWorkspace; /// /// 右侧树形菜单 /// private ToolStripItemCollection collectionRight; /// /// 设置热键的标记 /// private bool setHotKey = false; /// /// 为当前菜单设置的热键的list /// private List hotKeys = new List(); private Panel panel1; private GroupBox groupBox3; private Label label1; private Button button7; private GroupBox groupBox4; private Label label3; private TextBox textBox1; private Button button8; private GroupBox groupBox5; private Label label2; private GroupBox groupBox7; private TreeView treeViewRight; private ListView listView2; private GroupBox groupBox6; private HotkeyModel hotkeyModel = Startup.instance.hotkeyModel; private string txtPath = Application.StartupPath + "\\Config\\" + Startup.instance.SettingPrefix + "\\ModuleConfig.txt"; private string[] menuIdArr; public ShortKeys(AppWorkspace appWorkspace) { this.appWorkspace = appWorkspace; InitializeComponent(); InitializeLanguageText(); InitVisibleMenuId(); InitializeTreeData(); listView2.View = View.Details; listView2.Columns.Add("0", 0, HorizontalAlignment.Center); listView2.Columns.Add(PdnResources.GetString("Menu.tool.Generateshortcut.function.text"), 150, HorizontalAlignment.Center); listView2.Columns.Add(PdnResources.GetString("Menu.hotkey.text"), 200, HorizontalAlignment.Center); listView2.BeginUpdate(); foreach (HotkeyModel.Item s in hotkeyModel.items) { var lv = new ListViewItem(); lv.Tag = s.HotKeys; lv.Text = "1"; lv.SubItems.Add(s.MenuName); lv.SubItems.Add(s.HotKeys); lv.SubItems.Add(""); listView2.Items.Add(lv); } listView2.EndUpdate(); } /// /// 获取txt文件中已保存的菜单可用id /// private void InitVisibleMenuId() { if (System.IO.File.Exists(txtPath)) { string str = System.IO.File.ReadAllText(txtPath); if (str.IndexOf(',') != -1) { menuIdArr = str.Split(','); } else { if (!string.IsNullOrEmpty(str)) { menuIdArr = new string[] { str }; } } } } /// /// 初始化树形菜单数据 /// private void InitializeTreeData() { this.collectionRight = this.appWorkspace.ToolBar.MainMenu.Items; TreeNode anime = new TreeNode(PdnResources.GetString("Menu.menu.Text")); this.RecursiveData(collectionRight, anime); anime.Expand(); this.treeViewRight.Nodes.Add(anime); } /// /// 递归进行数据组织 /// private void RecursiveData(ToolStripItemCollection collection, TreeNode anime) { //for (int i = 0; i < collection.Count; i++) //{ // //排除掉最近打开的文件,或者可以用数字id判断更准确 // if (!collection[i].Name.Equals("OpenRecent") && !collection[i].Name.Equals("CameraSelection")) // { // if (collection[i].GetType() != typeof(ToolStripSeparator) && ((PdnMenuItem)collection[i]).CanShowInSenseShield) // { // TreeNode node = new TreeNode(); // node.Name = collection[i].Name; // node.Text = collection[i].Text; // node.Tag = ((PdnMenuItem)collection[i]).MenuId; // anime.Nodes.Add(node); // RecursiveData(((PdnMenuItem)collection[i]).DropDownItems, node); // } // } //} for (int i = 0; i < collection.Count; i++) { //排除掉最近打开的文件,或者可以用数字id判断更准确 if (!collection[i].Name.Equals("OpenRecent") && !collection[i].Name.Equals("CameraSelection")) { TreeNode node = new TreeNode(/*collection[i].Text*/); if (collection[i] is PdnMenuItem) { PdnMenuItem item = (PdnMenuItem)collection[i]; if (!item.CanShowInSenseShield) continue; node.Tag = item.MenuId; if (menuIdArr != null && menuIdArr.Length > 0) { if (Array.IndexOf(menuIdArr, item.MenuId.ToString()) != -1) { node.Name = collection[i].Name; node.Text = collection[i].Text; node.Tag = ((PdnMenuItem)collection[i]).MenuId; node.Checked = true; } else { node.Checked = false; } } if (node.Checked) { anime.Nodes.Add(node); } if (collection[i].Name.Equals("OpenRecent") || collection[i].Name.Equals("CameraSelection")) continue; RecursiveData(((PdnMenuItem)collection[i]).DropDownItems, node); } } } } #region 组件设计器生成的代码 private void InitializeLanguageText() { this.groupBox3.Text = PdnResources.GetString("Menu.tool.Generateshortcut.Theselectcutkey.text"); this.button7.Text = PdnResources.GetString("Menu.Edit.Delete.Text"); this.groupBox4.Text = PdnResources.GetString("Menu.tool.Generateshortcut.Maintainshortcut.text"); this.label3.Text = PdnResources.GetString("Menu.tool.Generateshortcut.ThehotkeorAlt:orF*.text"); this.button8.Text = PdnResources.GetString("Menu.Setting.Text"); this.groupBox5.Text = PdnResources.GetString("Menu.Thisshortcutkeyhasbeenappliedto.text"); this.groupBox7.Text = PdnResources.GetString("Menu.Availablefunctions.text"); this.groupBox6.Text = PdnResources.GetString("Menu.tool.Generateshortcut.Listofallfortcutkeys.text"); } /// /// 设计器支持所需的方法 - 不要修改 /// 使用代码编辑器修改此方法的内容。 /// private void InitializeComponent() { this.panel1 = new System.Windows.Forms.Panel(); this.groupBox3 = new System.Windows.Forms.GroupBox(); this.label1 = new System.Windows.Forms.Label(); this.button7 = new System.Windows.Forms.Button(); this.groupBox4 = new System.Windows.Forms.GroupBox(); this.label3 = new System.Windows.Forms.Label(); this.textBox1 = new System.Windows.Forms.TextBox(); this.button8 = new System.Windows.Forms.Button(); this.groupBox5 = new System.Windows.Forms.GroupBox(); this.label2 = new System.Windows.Forms.Label(); this.groupBox7 = new System.Windows.Forms.GroupBox(); this.treeViewRight = new System.Windows.Forms.TreeView(); this.listView2 = new System.Windows.Forms.ListView(); this.groupBox6 = new System.Windows.Forms.GroupBox(); this.panel1.SuspendLayout(); this.groupBox3.SuspendLayout(); this.groupBox4.SuspendLayout(); this.groupBox5.SuspendLayout(); this.groupBox7.SuspendLayout(); this.SuspendLayout(); // // panel1 // this.panel1.Controls.Add(this.groupBox3); this.panel1.Controls.Add(this.groupBox4); this.panel1.Controls.Add(this.groupBox5); this.panel1.Controls.Add(this.groupBox7); this.panel1.Controls.Add(this.groupBox6); this.panel1.Location = new System.Drawing.Point(0, 0); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(623, 398); this.panel1.TabIndex = 0; // // groupBox3 // this.groupBox3.Controls.Add(this.label1); this.groupBox3.Controls.Add(this.button7); this.groupBox3.Location = new System.Drawing.Point(0, 3); this.groupBox3.Margin = new System.Windows.Forms.Padding(0); this.groupBox3.Name = "groupBox3"; this.groupBox3.Size = new System.Drawing.Size(361, 58); this.groupBox3.TabIndex = 9; this.groupBox3.TabStop = false; this.groupBox3.Text = "所选功能快捷键"; // // label1 // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(9, 29); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(0, 12); this.label1.TabIndex = 1; // // button7 // this.button7.Location = new System.Drawing.Point(267, 20); this.button7.Name = "button7"; this.button7.Size = new System.Drawing.Size(75, 23); this.button7.TabIndex = 0; this.button7.Text = "删除"; this.button7.UseVisualStyleBackColor = true; this.button7.Click += button7_Click; // // groupBox4 // this.groupBox4.Controls.Add(this.label3); this.groupBox4.Controls.Add(this.textBox1); this.groupBox4.Controls.Add(this.button8); this.groupBox4.Location = new System.Drawing.Point(0, 67); this.groupBox4.Name = "groupBox4"; this.groupBox4.Size = new System.Drawing.Size(361, 76); this.groupBox4.TabIndex = 10; this.groupBox4.TabStop = false; this.groupBox4.Text = "维护快捷键"; // // label3 // this.label3.AutoSize = true; this.label3.Location = new System.Drawing.Point(9, 50); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(293, 12); this.label3.TabIndex = 2; this.label3.Text = "快捷键必须包含Ctrl或Alt; 或F*"; // // textBox1 // this.textBox1.Location = new System.Drawing.Point(9, 22); this.textBox1.Name = "textBox1"; this.textBox1.ReadOnly = true; this.textBox1.Size = new System.Drawing.Size(252, 21); this.textBox1.TabIndex = 1; this.textBox1.KeyUp += textBox1_KeyUp; this.textBox1.PreviewKeyDown += textBox1_PreviewKeyDown; //this.textBox1.KeyDown += textBox1_KeyDown; // // button8 // this.button8.Enabled = false; this.button8.Location = new System.Drawing.Point(267, 22); this.button8.Name = "button8"; this.button8.Size = new System.Drawing.Size(75, 23); this.button8.TabIndex = 0; this.button8.Text = "设置"; this.button8.UseVisualStyleBackColor = true; this.button8.Click += Button8_Click; // // groupBox5 // this.groupBox5.Controls.Add(this.label2); this.groupBox5.Location = new System.Drawing.Point(0, 149); this.groupBox5.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3); this.groupBox5.Name = "groupBox5"; this.groupBox5.Size = new System.Drawing.Size(361, 58); this.groupBox5.TabIndex = 11; this.groupBox5.TabStop = false; this.groupBox5.Text = "此快捷键已应用至"; // // label2 // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(9, 29); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(0, 12); this.label2.TabIndex = 0; // // groupBox7 // this.groupBox7.Controls.Add(this.treeViewRight); this.groupBox7.Location = new System.Drawing.Point(367, 0); this.groupBox7.Name = "groupBox7"; this.groupBox7.Size = new System.Drawing.Size(256, 401); this.groupBox7.TabIndex = 13; this.groupBox7.TabStop = false; this.groupBox7.Text = "可用功能"; // // treeView1 // this.treeViewRight.Location = new System.Drawing.Point(7, 20); this.treeViewRight.Name = "treeView1"; this.treeViewRight.Size = new System.Drawing.Size(243, 372); this.treeViewRight.TabIndex = 0; this.treeViewRight.NodeMouseClick += treeView1_NodeMouseClick; this.treeViewRight.HideSelection = false; this.treeViewRight.DrawMode = TreeViewDrawMode.OwnerDrawText; this.treeViewRight.DrawNode += new DrawTreeNodeEventHandler(this.treeViewRight_DrawNode); // // groupBox6 // this.groupBox6.Controls.Add(this.listView2); this.groupBox6.Location = new System.Drawing.Point(0, 211); this.groupBox6.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3); this.groupBox6.Name = "groupBox6"; this.groupBox6.Size = new System.Drawing.Size(361, 187); this.groupBox6.TabIndex = 12; this.groupBox6.TabStop = false; this.groupBox6.Text = "所有已指派快捷键的功能列表"; // // listView2 // this.listView2.FullRowSelect = true; this.listView2.HideSelection = false; this.listView2.Location = new System.Drawing.Point(6, 20); this.listView2.MultiSelect = false; this.listView2.Name = "listView2"; this.listView2.Size = new System.Drawing.Size(355/*382*/, 181/*441*/); this.listView2.TabIndex = 24; this.listView2.UseCompatibleStateImageBehavior = false; this.listView2.ItemSelectionChanged += ListView2_ItemSelectionChanged; // // ShortKeys // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.panel1); this.Margin = new System.Windows.Forms.Padding(0); this.Name = "ShortKeys"; this.Size = new System.Drawing.Size(623, 398); this.panel1.ResumeLayout(false); this.groupBox3.ResumeLayout(false); this.groupBox3.PerformLayout(); this.groupBox4.ResumeLayout(false); this.groupBox4.PerformLayout(); this.groupBox5.ResumeLayout(false); this.groupBox5.PerformLayout(); this.groupBox7.ResumeLayout(false); this.ResumeLayout(false); } private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if (!setHotKey) { setHotKey = true; this.textBox1.Text = ""; this.hotKeys.Clear(); } string keyString = e.KeyCode.ToString(); if (keyString.Equals("ControlKey")) { keyString = "Control"; } if (keyString.Equals("ShiftKey")) { keyString = "Shift"; } if (keyString.Equals("Menu")) { keyString = "Alt"; } if (setHotKey && !keyString.Equals("") && this.hotKeys.IndexOf(keyString) == -1) { this.hotKeys.Add(keyString); if (this.textBox1.Text.Equals("")) { this.textBox1.Text = keyString; } else { this.textBox1.Text += " + " + keyString; } } this.button8.Enabled = !this.textBox1.Text.Equals(""); } /// /// 自定义绘制 /// 参考https://www.cnblogs.com/JiYF/p/6693503.html /// /// /// private void treeViewRight_DrawNode(object sender, DrawTreeNodeEventArgs e) { /**用默认颜色 e.DrawDefault = true; return; **/ //以下是自定义颜色 if ((e.State & TreeNodeStates.Selected) != 0) { //演示为蓝(绿)底白字 e.Graphics.FillRectangle(SystemBrushes.Highlight/*Brushes.Green*/, e.Node.Bounds); Font nodeFont = e.Node.NodeFont; if (nodeFont == null) nodeFont = ((TreeView)sender).Font; e.Graphics.DrawString(e.Node.Text, nodeFont, Brushes.White, Rectangle.Inflate(e.Bounds, 2, 0)); } else { e.DrawDefault = true; } if ((e.State & TreeNodeStates.Focused) != 0) { using (Pen focusPen = new Pen(Color.Black)) { focusPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; Rectangle focusBounds = e.Node.Bounds; focusBounds.Size = new Size(focusBounds.Width - 1, focusBounds.Height - 1); e.Graphics.DrawRectangle(focusPen, focusBounds); } } } /// /// 设置 /// /// /// private void Button8_Click(object sender, EventArgs e) { try { //throw new NotImplementedException(); TreeNode node = this.treeViewRight.SelectedNode; if (node != null) { //判断快捷键是否已经被使用 HotkeyModel.Item isExsit = Startup.instance.hotkeyModel.items.Find(m => m.HotKeys.Equals(this.textBox1.Text)); if(isExsit != null) { MessageBox.Show(PdnResources.GetString("Menu.Theshortcutkeysarealreadyiuse.text")); return; } int menuId = (int)this.treeViewRight.SelectedNode.Tag; string desc = this.treeViewRight.SelectedNode.Name; string name = this.treeViewRight.SelectedNode.Text; //设置快捷键 ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(desc, true); if (menu != null && menu.Length > 0) { ((PdnMenuItem)menu[0]).resetShortcutKeys(this.textBox1.Text); } SaveShortcutKeys(); //处理界面数据 HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.MenuId == menuId); if (item != null) { foreach (ListViewItem item1 in listView2.Items) { if (item1.SubItems[2].Text.Equals(item.HotKeys)) { item1.SubItems[2].Text = this.textBox1.Text; break; } } item.HotKeys = this.textBox1.Text; } else { HotkeyModel.Item item1 = new HotkeyModel.Item(); item1.MenuId = menuId; item1.MenuName = name; item1.Description = desc; item1.HotKeys = this.textBox1.Text; Startup.instance.hotkeyModel.items.Add(item1); this.hotkeyModel = Startup.instance.hotkeyModel; SaveShortcutKeys(); var lv = new ListViewItem(); lv.Tag = this.textBox1.Text; lv.Text = "1"; lv.SubItems.Add(name); lv.SubItems.Add(this.textBox1.Text); lv.SubItems.Add(""); listView2.Items.Add(lv); } } } catch (Exception) { MessageBox.Show(PdnResources.GetString("Menu.conformtotherulespleasecheck.text")+"!"); } } private void ListView2_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { //throw new NotImplementedException(); listView2.FullRowSelect = true; if (this.listView2.SelectedItems.Count > 0) { foreach (ListViewItem item in listView2.Items) { if (item.Selected) { this.label1.Text = item.Tag as string; break; } } } } #endregion /// /// 按键抬起事件,需判断是否合法 /// 快捷键必须包含ctrl或alt;或back、delete、esc、F* /// /// /// private void textBox1_KeyUp(object sender, KeyEventArgs e) { setHotKey = false; //检测合法性 //e.Handled = true; e.SuppressKeyPress = true; //检测是否被占用 HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.HotKeys.Equals(this.textBox1.Text)); if (item != null) { this.label2.Text = item.MenuName; this.button8.Enabled = false; } else { this.label2.Text = PdnResources.GetString("Menu.Nofunctionaluse.text"); List> keysAll = new List>() { new List() { Keys.Alt, Keys.D0 }, new List() { Keys.Alt, Keys.D1}, new List() { Keys.Alt, Keys.D2}, new List() { Keys.Alt, Keys.D3}, new List() { Keys.Alt, Keys.D4}, new List() { Keys.Alt, Keys.D5}, new List() { Keys.Alt, Keys.D6}, new List() { Keys.Alt, Keys.D7}, new List() { Keys.Alt, Keys.D8}, new List() { Keys.Alt, Keys.D9}, new List() { Keys.Alt, Keys.Back}, new List() { Keys.Alt, Keys.Down}, new List() { Keys.Alt, Keys.F1}, new List() { Keys.Alt, Keys.F10}, new List() { Keys.Alt, Keys.F11}, new List() { Keys.Alt, Keys.F12}, new List() { Keys.Alt, Keys.F2}, new List() { Keys.Alt, Keys.F3}, new List() { Keys.Alt, Keys.F4}, new List() { Keys.Alt, Keys.F5}, new List() { Keys.Alt, Keys.F6}, new List() { Keys.Alt, Keys.F7}, new List() { Keys.Alt, Keys.F8}, new List() { Keys.Alt, Keys.F9}, new List() { Keys.Alt, Keys.Left}, new List() { Keys.Alt, Keys.Right}, new List() { Keys.Alt, Keys.Up}, new List() { Keys.Control, Keys.D0}, new List() { Keys.Control, Keys.D1}, new List() { Keys.Control, Keys.D2}, new List() { Keys.Control, Keys.D3}, new List() { Keys.Control, Keys.D4}, new List() { Keys.Control, Keys.D5}, new List() { Keys.Control, Keys.D6}, new List() { Keys.Control, Keys.D7}, new List() { Keys.Control, Keys.D8}, new List() { Keys.Control, Keys.D9}, new List() { Keys.Control, Keys.A}, new List() { Keys.Control, Keys.B}, new List() { Keys.Control, Keys.C}, new List() { Keys.Control, Keys.D}, new List() { Keys.Control, Keys.Delete}, new List() { Keys.Control, Keys.E}, new List() { Keys.Control, Keys.F}, new List() { Keys.Control, Keys.F1}, new List() { Keys.Control, Keys.F10}, new List() { Keys.Control, Keys.F11}, new List() { Keys.Control, Keys.F12}, new List() { Keys.Control, Keys.F2}, new List() { Keys.Control, Keys.F3}, new List() { Keys.Control, Keys.F4}, new List() { Keys.Control, Keys.F5}, new List() { Keys.Control, Keys.F6}, new List() { Keys.Control, Keys.F7}, new List() { Keys.Control, Keys.F8}, new List() { Keys.Control, Keys.F9}, new List() { Keys.Control, Keys.G}, new List() { Keys.Control, Keys.H}, new List() { Keys.Control, Keys.I}, new List() { Keys.Control, Keys.Insert}, new List() { Keys.Control, Keys.J}, new List() { Keys.Control, Keys.K}, new List() { Keys.Control, Keys.L}, new List() { Keys.Control, Keys.M}, new List() { Keys.Control, Keys.N}, new List() { Keys.Control, Keys.O}, new List() { Keys.Control, Keys.P}, new List() { Keys.Control, Keys.Q}, new List() { Keys.Control, Keys.R}, new List() { Keys.Control, Keys.S}, new List() { Keys.Control, Keys.Shift, Keys.D0}, new List() { Keys.Control, Keys.Shift, Keys.D1}, new List() { Keys.Control, Keys.Shift, Keys.D2}, new List() { Keys.Control, Keys.Shift, Keys.D3}, new List() { Keys.Control, Keys.Shift, Keys.D4}, new List() { Keys.Control, Keys.Shift, Keys.D5}, new List() { Keys.Control, Keys.Shift, Keys.D6}, new List() { Keys.Control, Keys.Shift, Keys.D7}, new List() { Keys.Control, Keys.Shift, Keys.D8}, new List() { Keys.Control, Keys.Shift, Keys.D9}, new List() { Keys.Control, Keys.Shift, Keys.A}, new List() { Keys.Control, Keys.Shift, Keys.B}, new List() { Keys.Control, Keys.Shift, Keys.C}, new List() { Keys.Control, Keys.Shift, Keys.D}, new List() { Keys.Control, Keys.Shift, Keys.E}, new List() { Keys.Control, Keys.Shift, Keys.F}, new List() { Keys.Control, Keys.Shift, Keys.F1}, new List() { Keys.Control, Keys.Shift, Keys.F10}, new List() { Keys.Control, Keys.Shift, Keys.F11}, new List() { Keys.Control, Keys.Shift, Keys.F12}, new List() { Keys.Control, Keys.Shift, Keys.F2}, new List() { Keys.Control, Keys.Shift, Keys.F3}, new List() { Keys.Control, Keys.Shift, Keys.F4}, new List() { Keys.Control, Keys.Shift, Keys.F5}, new List() { Keys.Control, Keys.Shift, Keys.F6}, new List() { Keys.Control, Keys.Shift, Keys.F7}, new List() { Keys.Control, Keys.Shift, Keys.F8}, new List() { Keys.Control, Keys.Shift, Keys.F9}, new List() { Keys.Control, Keys.Shift, Keys.G}, new List() { Keys.Control, Keys.Shift, Keys.H}, new List() { Keys.Control, Keys.Shift, Keys.I}, new List() { Keys.Control, Keys.Shift, Keys.J}, new List() { Keys.Control, Keys.Shift, Keys.K}, new List() { Keys.Control, Keys.Shift, Keys.L}, new List() { Keys.Control, Keys.Shift, Keys.M}, new List() { Keys.Control, Keys.Shift, Keys.N}, new List() { Keys.Control, Keys.Shift, Keys.O}, new List() { Keys.Control, Keys.Shift, Keys.P}, new List() { Keys.Control, Keys.Shift, Keys.Q}, new List() { Keys.Control, Keys.Shift, Keys.R}, new List() { Keys.Control, Keys.Shift, Keys.S}, new List() { Keys.Control, Keys.Shift, Keys.T}, new List() { Keys.Control, Keys.Shift, Keys.U}, new List() { Keys.Control, Keys.Shift, Keys.V}, new List() { Keys.Control, Keys.Shift, Keys.W}, new List() { Keys.Control, Keys.Shift, Keys.X}, new List() { Keys.Control, Keys.Shift, Keys.Y}, new List() { Keys.Control, Keys.Shift, Keys.Z}, new List() { Keys.Control, Keys.T}, new List() { Keys.Control, Keys.U}, new List() { Keys.Control, Keys.V}, new List() { Keys.Control, Keys.W}, new List() { Keys.Control, Keys.X}, new List() { Keys.Control, Keys.Y}, new List() { Keys.Control, Keys.Z}, new List() { Keys.Delete}, new List() { Keys.F1}, new List() { Keys.F10}, new List() { Keys.F11}, new List() { Keys.F12}, new List() { Keys.F2}, new List() { Keys.F3}, new List() { Keys.F4}, new List() { Keys.F5}, new List() { Keys.F6}, new List() { Keys.F7}, new List() { Keys.F8}, new List() { Keys.F9}, new List() { Keys.Insert}, new List() { Keys.None}, new List() { Keys.Shift | Keys.Delete}, new List() { Keys.Shift | Keys.F1}, new List() { Keys.Shift | Keys.F10}, new List() { Keys.Shift | Keys.F11}, new List() { Keys.Shift | Keys.F12}, new List() { Keys.Shift | Keys.F2}, new List() { Keys.Shift | Keys.F3}, new List() { Keys.Shift | Keys.F4}, new List() { Keys.Shift | Keys.F5}, new List() { Keys.Shift | Keys.F6}, new List() { Keys.Shift | Keys.F7}, new List() { Keys.Shift | Keys.F8}, new List() { Keys.Shift | Keys.F9}, new List() { Keys.Shift | Keys.Insert} }; string itemHotKeys = this.textBox1.Text; List> keysFound = new List>(); if (itemHotKeys != null && !itemHotKeys.Equals("")) { string[] keys = itemHotKeys.Trim().Split('+'); Keys Key = Keys.None; //寻找匹配的按键组合 int keyIndex = 0; foreach (string key in keys) { if (Key == Keys.None) { Key = (Keys)(Enum.Parse(typeof(Keys), key.Trim())); //寻找可能匹配的按键组合 foreach (var itemList in keysAll) { if (itemList.Contains(Key) && itemList.IndexOf(Key) == keyIndex && itemList.Count == keys.Length) keysFound.Add(itemList); } } else { Key = (Keys)(Enum.Parse(typeof(Keys), key.Trim())); //删除不匹配的按键组合 for (int i = keysFound.Count - 1; i >= 0 ; i--) { var itemList = keysFound[i]; if (!itemList.Contains(Key) || itemList.IndexOf(Key) != keyIndex) keysFound.RemoveAt(i); } } keyIndex++; } //没有找到匹配的按键组合 if (keysFound.Count != 1) { this.textBox1.Text = ""; } } this.button8.Enabled = !this.textBox1.Text.Equals(""); } } /// /// 维护快捷键的textbox的按键按下事件 /// /// /// private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (!setHotKey) { setHotKey = true; this.textBox1.Text = ""; this.hotKeys.Clear(); } string keyString = e.KeyCode.ToString(); if (keyString.Equals("ControlKey")) { keyString = "Control"; } if (keyString.Equals("ShiftKey")) { keyString = "Shift"; } if (keyString.Equals("Menu")) { keyString = "Alt"; } if (setHotKey && !keyString.Equals("") && this.hotKeys.IndexOf(keyString) == -1) { this.hotKeys.Add(keyString); if (this.textBox1.Text.Equals("")) { this.textBox1.Text = keyString; } else { this.textBox1.Text += " + " + keyString; } } this.button8.Enabled = !this.textBox1.Text.Equals(""); } private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { int menuId = (e.Node.Tag != null) ? (int)(e.Node.Tag) : 0; if (menuId > 0) { if (Startup.instance.hotkeyModel != null && Startup.instance.hotkeyModel.items != null && Startup.instance.hotkeyModel.items.Count > 0) { HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.MenuId == menuId); if (item != null) { this.label1.Text = item.HotKeys; } else { this.label1.Text = PdnResources.GetString("Menu.arenotmaintained.text"); } } } } /// /// 设置快捷键 /// /// /// private void button8_MouseClick(object sender, MouseEventArgs e) { TreeNode node = this.treeViewRight.SelectedNode; if (node != null) { int menuId = (int)this.treeViewRight.SelectedNode.Tag; string desc = this.treeViewRight.SelectedNode.Name; string name = this.treeViewRight.SelectedNode.Text; HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.MenuId == menuId); if (item != null) { item.HotKeys = this.textBox1.Text; } else { HotkeyModel.Item item1 = new HotkeyModel.Item(); item1.MenuId = menuId; item1.MenuName = name; item1.Description = desc; item1.HotKeys = this.textBox1.Text; Startup.instance.hotkeyModel.items.Add(item1); } var lv = new ListViewItem(); lv.Text = "1"; lv.SubItems.Add(name); lv.SubItems.Add(this.textBox1.Text); lv.SubItems.Add(""); listView2.Items.Add(lv); this.hotkeyModel = Startup.instance.hotkeyModel; SaveShortcutKeys(); } } /// /// 保存快捷键 /// private void SaveShortcutKeys() { string hotkeyModelXml = XmlSerializeHelper.XmlSerialize(hotkeyModel); string filePath = Application.StartupPath + "\\Config\\" + Startup.instance.SettingPrefix + "\\Hotkey.xml"; if (!FileOperationHelper.WriteStringToFile(hotkeyModelXml, filePath, FileMode.Create)) { MessageBox.Show(PdnResources.GetString("Menu.Failedtosaveshortcutkeyinformation.text")); } } /// /// 删除快捷键 /// /// /// private void button7_Click(object sender, EventArgs e) { //TreeNode node = this.treeViewRight.SelectedNode; if (!this.label1.Text.Equals(PdnResources.GetString("Menu.arenotmaintained.text")) && !this.label1.Text.Equals("")) { HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.HotKeys.Equals(this.label1.Text)); if (item == null) return; if (MessageBox.Show(PdnResources.GetString("Menu.suretodeletethesho.text")+"?", PdnResources.GetString("Menu.suredeletit.Text"), MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1) == DialogResult.OK) { if (item != null && item.HotKeys == this.label1.Text) { foreach (ListViewItem item22 in listView2.Items) { if (item22.Tag.ToString().Equals(item.HotKeys)) { listView2.Items.Remove(item22); break; } } Startup.instance.hotkeyModel.items.Remove(item); ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(item.Description, true); if (menu != null && menu.Length > 0) { ((PdnMenuItem)menu[0]).resetShortcutKeys(""); } SaveShortcutKeys(); this.label1.Text = PdnResources.GetString("Menu.arenotmaintained.text"); return; } } } //<<- //#18266 //TreeNode node = this.treeViewRight.SelectedNode; //if (node != null) //{ // if (MessageBox.Show("确认删除快捷键吗,删除后不可恢复?", "确定", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1) == DialogResult.OK) // { // int menuId = (int)this.treeViewRight.SelectedNode.Tag; // HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.MenuId == menuId); // if (item != null && item.HotKeys == this.label1.Text) // { // foreach (ListViewItem item22 in listView2.Items) // { // if (item22.Tag.ToString().Equals(item.HotKeys)) // { // listView2.Items.Remove(item22); // break; // } // } // Startup.instance.hotkeyModel.items.Remove(item); // ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(item.Description, true); // if (menu != null && menu.Length > 0) // { // ((PdnMenuItem)menu[0]).resetShortcutKeys(""); // } // SaveShortcutKeys(); // this.label1.Text = "暂未维护快捷键"; // return; // } // } //} //if (this.listView2.SelectedItems.Count > 0) //{ // foreach (ListViewItem item1 in listView2.SelectedItems) // { // HotkeyModel.Item item = Startup.instance.hotkeyModel.items.Find(m => m.HotKeys == item1.Tag); // if (item != null) // { // listView2.Items.Remove(item1); // Startup.instance.hotkeyModel.items.Remove(item); // ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(item.Description, true); // if (menu != null && menu.Length > 0) // { // ((PdnMenuItem)menu[0]).resetShortcutKeys(""); // } // SaveShortcutKeys(); // this.label1.Text = "暂未维护快捷键"; // break; // } // } //} } /// /// 导出配置 /// /// public void ExportToolbarXml() { using (SaveFileDialog saveFileDialog = new SaveFileDialog()) { saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); saveFileDialog.Filter = "Xml(*.xml)|*.xml"; saveFileDialog.DefaultExt = "xml"; saveFileDialog.FilterIndex = 1; saveFileDialog.CheckFileExists = false; saveFileDialog.AddExtension = true; saveFileDialog.FileName = "Hotkey"; if (saveFileDialog.ShowDialog() == DialogResult.OK) { string filePath = saveFileDialog.FileName; string toolbarXml = XmlSerializeHelper.XmlSerialize(Startup.instance.hotkeyModel); if (FileOperationHelper.WriteStringToFile(toolbarXml, filePath, FileMode.Create)) MessageBox.Show(PdnResources.GetString("Menu.Theshortcutkeysuccessfully.text")); else MessageBox.Show(PdnResources.GetString("Menu.Theshortcutkeyconfigurationfilefailedtosave.text")); } } } /// /// 导入配置 /// /// public void ImportToolbarXml() { using (var openFileDialog = new OpenFileDialog { Filter = "*.xml|*.xml" }) { if (openFileDialog.ShowDialog() == DialogResult.OK) { using (Stream shortKeyStream = System.IO.File.OpenRead(openFileDialog.FileName)) { StreamReader sr = new StreamReader(shortKeyStream); string xmlNotes = sr.ReadToEnd(); HotkeyModel toolbarXml = XmlSerializeHelper.DESerializer(xmlNotes); if (toolbarXml.items.Count > 0) { try { Startup.instance.hotkeyModel = toolbarXml; this.hotkeyModel = toolbarXml; this.listView2.Items.Clear(); this.listView2.BeginUpdate(); foreach (HotkeyModel.Item s in toolbarXml.items) { var lv = new ListViewItem(); lv.Tag = s.HotKeys; lv.Text = "1"; lv.SubItems.Add(s.MenuName); lv.SubItems.Add(s.HotKeys); lv.SubItems.Add(""); this.listView2.Items.Add(lv); ToolStripItem[] menu = this.appWorkspace.ToolBar.MainMenu.Items.Find(s.Description, true); if (menu != null && menu.Length > 0) { ((PdnMenuItem)menu[0]).resetShortcutKeys(s.HotKeys); } } this.listView2.EndUpdate(); SaveShortcutKeys(); MessageBox.Show(PdnResources.GetString("Menu.Shortcutprofileimportedsuccessfully.text")); } catch(Exception) { MessageBox.Show(PdnResources.GetString("Menu.Theshortcutconfigurationfileimportfailed.text")); } } else { MessageBox.Show(PdnResources.GetString("Menu.onfiguratiofilesavedconfiguratio.text")); } } } } } } }