参考自:http://www.csharpwin.com/csharpspace/3932r8132.shtml

一、C# button快捷键之第一种:Alt + *(按钮快捷键)

  在Button按钮的Text属性的文本名称加(&键名)就可以了,如button1.Text = "保存(&S)"; 这样只要按Alt+S就可以执行按钮的单击事件。

二、C# button快捷键之第二种:Ctrl+*及其他组合键

  在WinForm中设置要使用组合键的窗体的KeyPreview(向窗体注册键盘事件)属性为True;然后使用窗体的KeyDown事件(在首次按下某个键时发生)或KeyPress事件或KeyUp事件

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
   // if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.S)
if (e.KeyCode == Keys.S && e.Control)
{
button1.PerformClick(); //执行单击button1的动作
}
}

还有一个问题,当使用Ctrl + *快捷键时,对于焦点在可写的控件(如TextBox)上时,可能会将* 键值同时输入,则需要加另一句话将Handled设置为true,以取消 KeyDown 事件。

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.S && e.Control)
{
e.Handled = true; //将Handled设置为true,指示已经处理过KeyDown事件
button1.PerformClick(); //执行单击button1的动作
}
}

三、C# button快捷键之第三种方法(不推荐使用该方式)

  还是以button为例。给form添加一个contextMenuStrip1,将其邦定到form窗体的ContextMenuStrip属性上。给contextMenuStrip1添加一个item,然后为它设置快捷键(在右键菜单项的ShortcutKeys属性上设置快捷键),将它的Visible属性设为false,并且将它的点击事件设为button的点击事件方法。这样,C#button快捷键设置成功。

四、C# button快捷键之第四种方法:重写ProcessCmdKey(ref Message msg, Keys keyData)方法

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
//处理要做的事,
//不希望做其它做用,return true
// 要做其它的 return base.ProcessCmdKey(ref msg, keyData);
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
// 按快捷键Ctrl+S执行按钮的点击事件方法
if (keyData == (Keys)Shortcut.CtrlS)
{
button1.PerformClick();
return true;
}
return base.ProcessCmdKey(ref msg, keyData); // 其他键按默认处理 
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
// 实现按Enter键来实现Ctrl+S键的功能
if (keyData == Keys.Enter)
{
SendKeys.Send("^s");
return true;
}
// 按快捷键Ctrl+S执行按钮的点击事件方法
  //if (keyData == (Keys.Control | Keys.S))
if (keyData == (Keys)Shortcut.CtrlS)
{
button1.PerformClick();
return true;
}
return base.ProcessCmdKey(ref msg, keyData); // 其他键按默认处理 
}

SendKeys.Send(string keys),要发送的键字符串,可以查看MSDN:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.sendkeys.send(v=VS.80).aspx

如果ProcessCmdKey(ref Message msg, Keys keyData)方法的效果不行,可以试试ProcessDialogKey(Keys keyData)方法

protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter)
  {
  keyData = Keys.Tab;
  //ProcessTabKey(true);
  }
return base.ProcessDialogKey(keyData);
}

另:Form 重写ProcessCmdKey: 解决enter同时Tab 的问题

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Enter && ((!(ActiveControl is System.Windows.Forms.TextBox)
|| !((System.Windows.Forms.TextBox)ActiveControl).AcceptsReturn)))
{
SendKeys.SendWait("{Tab}");
return true;
}
if (keyData == ( Keys.Enter | Keys.Shift))
{
SendKeys.SendWait("+{Tab}");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}

C# button快捷键之第五种方法:使用系统API (来自:http://blog.sina.com.cn/s/blog_674a665801013hit.html

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices; namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("使用快捷键启动按钮");
} private void Form1_Load(object sender, EventArgs e)
{
//注册热键Ctrl+F12,这里的8879就是一个ID识别
  RegisterHotKey(this.Handle, , , Keys.F12);
} private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//用来取消注册的热键
  UnregisterHotKey(this.Handle, );
} /// <summary>
/// 注册热键
 /// </summary>
/// <param name="hWnd">为窗口句柄</param>
/// <param name="id">注册的热键识别ID</param>
/// <param name="control">组合键代码 Alt的值为1,Ctrl的值为2,Shift的值为4,Shift+Alt组合键为5
/// Shift+Alt+Ctrl组合键为7,Windows键的值为8
/// </param>
/// <param name="vk">按键枚举</param>
/// <returns></returns>
[DllImport("user32")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint control, Keys vk); /// <summary>
/// 取消注册的热键
/// </summary>
/// <param name="hWnd">窗口句柄</param>
/// <param name="id">注册的热键id</param>
/// <returns></returns>
[DllImport("user32")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id); // 响应热键
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0312:   //这个是window消息定义的注册的热键消息
if (m.WParam.ToString().Equals("")) //如果是注册的那个热键
{
// 执行button按钮
button1.PerformClick();
}
break;
}
base.WndProc(ref m);
}
}
}

C# 设置按钮快捷键的更多相关文章

  1. winfrom中按钮文本&的显示问题/按钮快捷键设置问题

    其实这个问题是因为“&”有特殊的意义-就是可以作为快捷键 第一种:Alt + *(按钮快捷键) 在大家给button.label.menuStrip等控件设置Text属性时在名字后边加& ...

  2. [转]C#设置WinForm快捷键

    1.Alt+*(按钮快捷键)按钮快捷键也为最常用快捷键,其设置也故为简单.在大家给button.label.menuStrip等其他控件的Text属性指定名称时,在其后面加上‘&’然后在加上一 ...

  3. eclipse设置自定义快捷键

    eclipse有很多强大且人性化的功能,而各项功能有时又隐藏得比较深(需要点击数次菜单才能找到),而系统提供的快捷键有时比较难记住甚至根本没有提供快捷键时,就需要自己手动设置快捷键了.设置方法有两种, ...

  4. 【转载】PC端微信设置操作快捷键方法

    在电脑上使用微信的时候,有时候我们需要自定义PC版微信快捷键操作,支持自定义微信快捷键设置的有:发送消息快捷键.截屏快捷键.打开微信快捷键以及检测快捷键热键是否与其他软件设置冲突.并且自定义设置PC微 ...

  5. PLSQL Developer常用设置及快捷键

    CSDN日报20170314--<40岁程序员真的要被淘汰了么?> 程序员2月书讯 [直播]用面向协议的思想简化网络请求 博客一键搬家活动开始啦 PLSQL Developer常用设置及快 ...

  6. 使用js 设置组合快捷键

    使用js 设置组合快捷键 使用js设置快捷键的本质就是获得你要设置的这个键的keyCode 的值,如果要加ctrl,alt,shift,那么就添加一个ctrlkey,altKey,shiftKey来判 ...

  7. Source Insight 常用设置和快捷键大全

    Source Insight 常用设置和快捷键大全 退出程序 : Alt+F4 重画屏幕 : Ctrl+Alt+Space 完成语法 : Ctrl+E 复制一行 : Ctrl+K 恰好复制该位置右边的 ...

  8. MFC 使用位图按钮,并且设置按钮的鼠标悬停效果

    系统环境:Windows 10软件环境:Visual C++ 2013 SP1本次目的:使用位图按钮,并且设置按钮的鼠标悬停效果 在用MFC开发时,界面是比较不好开发的一块.VC中自带了CBitmap ...

  9. vc设置按钮文字颜色

    设置按钮文字颜色使用 CMFCBUTTON即可 在OnInitDialog函数加入如下内容即可 ((CMFCButton*)GetDlgItem(IDC_MFCBUTTON1))->SetTex ...

随机推荐

  1. (1)DBA查询:数据库

    1.数据库状态:[1]sys.databases   [2]exec sp_spaceused 2.数据文件状态:[1]sys.master_files [2]查看ldf与mdf:sp_helpfil ...

  2. Linux系统上传文件与下载文件命令

    我们用的服务器都是Linux系统的,如果用的是远程服务器,就需要将我们的代码推送过去,这里可以用到PSCP命令. (一)上传 pscp 本机文件的路径以及文件名 远程主机的用户名@远程主机IP:想要存 ...

  3. what's the python之基本运算符及字符串、列表、元祖、集合、字典的内置方法

    计算机可以进行的运算有很多种,运算按种类可分为算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.字符串和列表的算数运算只能用+和*,字典没有顺序,所以不能进行算数运算和比较运算.比较运算中= ...

  4. VUE设置浏览器icon图标

    一.将[logo.png]格式图片转换为[logo.bmp]格式 ps打开图片- 存储为 BMP格式 保存好的[logo.bmp] 格式的图片重命名为[logo.ico] 二.将[logo.ico]图 ...

  5. pymysql下报错:numpy.float64 object has no attribute 'translate' 可能是pandas版本的问题

    pymysql下报错:numpy.float64 object has no attribute 'translate'.定位到db.merge函数中,dataframe中浮点型元素的类型为numpy ...

  6. tf之get_Variable()

    转自:https://blog.csdn.net/UESTC_C2_403/article/details/72327321 1. tf.get_variable(name,  shape, init ...

  7. sklearn.svm.LinearSVC文档学习

    https://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC 1 ...

  8. 【LeetCode每天一题】Valid Parentheses(有效的括弧)

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  9. seq2seq和attention应用到文档自动摘要

    一.摘要种类 抽取式摘要 直接从原文中抽取一些句子组成摘要.本质上就是个排序问题,给每个句子打分,将高分句子摘出来,再做一些去冗余(方法是MMR)等.这种方式应用最广泛,因为比较简单.经典方法有Lex ...

  10. [洛谷]p1996约瑟夫环 &xdoj1311

    https://www.luogu.org/problemnew/show/P1996 约瑟夫环这个问题一直以来都是用循环链表写的,今天才知道有循环队列的写法.以下是要点: 1.循环队列实现环的思想, ...