設計winform自帶動態加載工具按鈕和實現熱鍵響應,winform熱鍵
1.初衷
主要是想設計一個自帶添加工具按鈕和按鈕的快捷鍵的基窗體。這樣以後所設計的窗體只要繼承自這個窗體就可以實現熱鍵響應和動態加工具按鈕的功能了
寫這邊文章主要是為了以後使用的時候有個參考,因為這只是個demo,長時間不用總會忘記的。到時候可以翻看,同時也可以給博友借鑒。接下來,我詳細說明這個窗體如何設計的
2.設計步驟
I.新建一個winform項目,此時默認自帶form1窗體,放置一個toolstrip工具控件
II.引用程序集rabbit.core.dll,也就是我封裝好的熱鍵響應幫助類啦
點我下載
III.form1.cs文件代碼如下
using Rabbit.Core.HotKey;
using Rabbit.UI;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HotKeyBindDemo
{
public partial class Form1 : Form
{
//存儲所有注冊後的熱鍵
Dictionary<int, ToolStripAndEvent> HotKeyDict = new Dictionary<int, ToolStripAndEvent>();
public Form1()
{
InitializeComponent();
}
//窗體激活的時候,注冊熱鍵
private void Form1_Activated(object sender, EventArgs e)
{
}
//窗體失活時撤銷熱鍵
private void Form1_Deactivate(object sender, EventArgs e)
{
keyBindHelper.UnregisterHotKey(this, 11);
keyBindHelper.UnregisterHotKey(this, 12);
}
/// <summary>
/// 對工具欄增加一個按鈕
/// </summary>
/// <param name="Caption">按鈕標題</param>
/// <param name="image">圖案</param>
/// <param name="ClickEvent">被按下的事件</param>
/// <param name="Hotkey">快捷鍵</param>
public ToolStripButton AddComandButton(string Caption, Image image, EventHandler ClickEvent, int Hotkey)
{
ToolStripButton AddButton = new ToolStripButton(Caption, image, ClickEvent);
try
{
AddButton.ImageTransparentColor = Color.Magenta;
AddButton.Size = new System.Drawing.Size(56, 47);
AddButton.TextImageRelation = TextImageRelation.ImageAboveText;
ToolStripAndEvent toolStripAndEvent = new ToolStripAndEvent()
{
BeClickEvent = ClickEvent,
TargetButton = AddButton,
};
CommandtoolStrip.Items.Add(AddButton);
HotKeyDict.Add(Hotkey, toolStripAndEvent);
}
catch (Exception)
{
}
return AddButton;
}
/// <summary>
/// window一個消息機制,會不停的循環執行該函數,一旦按下了快捷鍵,就會被捕捉
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == keyBindHelper.WM_HOTKEY)//一旦按下了快捷鍵,那麼當前消息就是熱鍵相應,被匹配,進入if遇見內部
{
int id = m.WParam.ToInt32();
keyBindHelper.HotKeyOperation(HotKeyDict, id);//響應id對應的點擊事件
}
}
private void Form1_Load(object sender, EventArgs e)
{
#region 注冊熱鍵,其實就是F1與11綁定,F2與12綁定
keyBindHelper.RegisterHotKey(this, 11, keyBindHelper.KeyModifiers.None, Keys.F1);//F1綁定了11
keyBindHelper.RegisterHotKey(this, 12, keyBindHelper.KeyModifiers.None, Keys.F2);//F2綁定了12
#endregion
#region 工具欄保存按鈕點擊事件與11綁定,打印單擊事件與12綁定
AddComandButton("保存(F1)", Rabbit.Core.Properties.Resources.保存, save_click, 11);//11綁定了save_click
AddComandButton("打印(F2)", Rabbit.Core.Properties.Resources.打印, Print_click, 12);//12綁定了Print_click
#endregion
//總結:這樣按下F1時,F1會去匹配11這個數字,然後11去匹配了save_click這個事件然後響應這個事件
}
//保存功能
private void save_click(object sender, EventArgs e)
{
MessageBox.Show("保存功能被響應!");
}
//打印功能
private void Print_click(object sender, EventArgs e)
{
MessageBox.Show("打印功能被響應!");
}
//關閉窗體注銷熱鍵
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Form1_Deactivate(null, null);
}
}
}
View Code
慢慢看,注釋寫的很清楚,相信你能大致明白怎麼使用
IV.運行效果如下
V.總結
簡單數一下原理吧,要想實現熱鍵響應,首先得注冊熱鍵,然後綁定事件,即熱鍵-》id=》事件,這樣消息機制就會捕捉到這樣一個流程。
VI.關於
歡迎不是很明白的博友可以留言交流。我的qq:739462304