设计winform自带动态加载工具按钮和实现热键响应

时间:2022-02-22 11:41:39

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, );
keyBindHelper.UnregisterHotKey(this, );
} /// <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(, );
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, , keyBindHelper.KeyModifiers.None, Keys.F1);//F1绑定了11
keyBindHelper.RegisterHotKey(this, , keyBindHelper.KeyModifiers.None, Keys.F2);//F2绑定了12
#endregion #region 工具栏保存按钮点击事件与11绑定,打印单击事件与12绑定
AddComandButton("保存(F1)", Rabbit.Core.Properties.Resources.保存, save_click, );//11绑定了save_click
AddComandButton("打印(F2)", Rabbit.Core.Properties.Resources.打印, Print_click, );//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);
} }
}

慢慢看,注释写的很清楚,相信你能大致明白怎么使用

IV.运行效果如下

设计winform自带动态加载工具按钮和实现热键响应

V.总结

简单数一下原理吧,要想实现热键响应,首先得注册热键,然后绑定事件,即热键-》id=》事件,这样消息机制就会捕捉到这样一个流程。

VI.关于

欢迎不是很明白的博友可以留言交流。我的qq:739462304

设计winform自带动态加载工具按钮和实现热键响应的更多相关文章

  1. C&num;自定义控件、用户控件、动态加载菜单按钮

    一.效果图,动态加载5个菜单按钮: 二.实现方法 1.创建用户控件 2.在用户控件拖入toolStrip 3.进入用户控件的Lood事件,这里自动添加5个选  ToolStripMenuItem,后期 ...

  2. 会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载

    在上篇<会员管理系统的设计和开发(1)>介绍了关于会员系统的一些总体设计思路和要点,经过一段时间开发,软件终于完成并发布.在这期间,碰到了不少技术难点,并积累了不少开发心得和经验,本篇继续 ...

  3. C&num;动态加载树菜单

    在做权限系统的时候,需要有一个树形的菜单.下图就是一个树形菜单的样式 但问题是,我们可以实现写死的树形菜单.什么是写死的?就是在前台代码中写好要加载的树形菜单是什么样子的.但是我们权限系统的要求是动态 ...

  4. Winform开发框架之客户关系管理系统&lpar;CRM&rpar;的开发总结系列4-Tab控件页面的动态加载

    在前面介绍的几篇关于CRM系统的开发随笔中,里面都整合了多个页面的功能,包括多文档界面,以及客户相关信息的页面展示,这个模块就是利用DevExpress控件的XtraTabPage控件的动态加载实现的 ...

  5. 动态加载与插件系统的初步实现(3):WinForm示例

    动态加载与插件系统的初步实现(三):WinForm示例 代码文件在此Download,本文章围绕前文所述默认AppDomain.插件容器AppDomain两个域及IPlugin.PluginProvi ...

  6. 使用jquery的load方法设计动态加载,并解决浏览器前进、后退、刷新等问题

    继上一篇 使用jquery的load方法设计动态加载,并解决被加载页面JavaScript失效问题 解决了后台业务系统的部分动态加载问题,然而该框架离正常的用户体验还存在一些问题,如:浏览器的前进.后 ...

  7. SpringBoot自带热加载开发工具

    SpringBoot自带热加载开发工具 maven配置: <!-- SpringBoot自带热加载开发工具 --> <dependency> <groupId>or ...

  8. Xib设计UITableViewCell然后动态加载

    转自: http://www.2cto.com/kf/201202/120764.html (注:环境Mac OS X Lion 10.7.3 + Xcode 4.2.1 + iOS SDK 5.0. ...

  9. Win8 Metro动态加载内容框架

    制作背景 为了参加ImagineCup 2013 世界公民类比赛,我们设计制作了一个可动态扩展的幼教类App.这个App需要能动态加载内容,内容包括带动画可交互的电子书,动画,视频,游戏. 技术支持 ...

随机推荐

  1. Javascript中的Promise

    Promise定义 Promise是CommonJs的规范之一,包含resolve,reject,done,fail,then等方法,能够帮助我们控制代码的流程,避免函数的多层嵌套.异步在web开发中 ...

  2. 『TCP&sol;IP详解——卷一:协议』读书笔记——14

    2013-08-25 11:32:06 第5章 RARP:逆地址解析协议 5.1 引言 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址.但是无盘机,如X终端或无盘工作站,则需要采用其 ...

  3. PowerDesign设置列名与表名的大小写规则

    因为设计的Model是要用到Oracle 11g的,Oracle 11g的表名和列名默认是大写,在设计模型当中小写转大写一直很苦闹,发现PowerDedign可以直接设置,见下文: 打开Tools-- ...

  4. Mysql用户密码设置修改和权限分配

    我的mysql安装在c:\mysql 一.更改密码 第一种方式: 1.更改之前root没有密码的情况 c:\mysql\bin>mysqladmin -u root password &quot ...

  5. CSS--使用方式

    创建CSS有三种方式: 外部样式表, 内部样式表和内联样式. 外部样式表 先建立外部样式表文件(.css),然后在网页文件的<head>内使用<link>链接.这种方式将样式文 ...

  6. 解决iScroll横向滚动区域无法拉动页面的问题

    近期项目中使用iScroll遇到一个问题,在设定wrapper为横向滚动时,如果你手指放在该区域,将无法拉动页面,也就是说该区域取消了默认事件.这个体验是实在是无法接受,特别是页面中有多个横向滚动区域 ...

  7. AIX6&period;1用g&plus;&plus;安装Poco-1&period;6&period;1-all

    项目终于到了把程序往小型机上部署的阶段了.不得不说AIX真是让人恶心,一个Poco编译弄了我1周时间.网上根本没有相关的资料. 1. AIX下安装gcc/g++:在ftp://ftp.software ...

  8. GridView中如何实现自定义时间货币等字符串格式?

    方法一: <asp :GridView ID="GridView1" runat="server"> <columns> <asp ...

  9. wikioi 1048 石子归并

    dp[i][j]=min(dp[i][j],dp[i][k],dp[k+1][j]+sum[i][j]); 表示i-j的最小合并代价. #include <iostream> #inclu ...

  10. 博弈论教程(A Course in Game Theory)摘录

    P4 在我们所研究的模型中,决策主体往往要在不确定条件下进行决策.参与人可能: 不能确定环境的客观因素: 对博弈中发生的事件不很清楚: 不能确定别的不确定参与人的行动: 不能确定别的参与人的推理. 为 ...