第一种:Alt + *(按钮快捷键)在大家给button、label、menuStrip等控件设置Text属性时在名字后边加&键名就可以了,比如button1.text= "确定(&O)"。就会有快捷键了,这时候按Alt+O就可以执行按钮单击事件。第二种:Ctrl+*及其他组合键在WinForm中设置要使用组合键的窗体的KeyPreview(向窗体注册键盘事件)属性为True;然后使用窗体的KeyDown事件(在首次按下某个键时发生).实例代码:private void ***_KeyDown(object sender, KeyEventArgs e){if (e.KeyCode == Keys.F && e.Control){button1.PerformClick(); //执行单击button1的动作}}注:1、***代表窗体名称,大家可以看一下 ”Keys”的枚举参数,以实现自己需要2、还有一个问题,当使用Ctrl + *快捷键时,对于焦点在可写的控件(如TextBox)上时,可能会将* 键值同时输入,则需要加另一句话将Handled设置为true,以取消 KeyPress 事件。即:private void ***_KeyDown(object sender, KeyEventArgs e){if (e.KeyCode == Keys.F && e.Control){e.Handled = true; //将Handled设置为true,指示已经处理过KeyPress事件button1.PerformClick(); }}第三种:还是以button为例。给form添加一个contextMenuStrip1,将其邦定到button上,假设为button1。给 contextMenuStrip1添加一个item,然后为它设置快捷键(就是你想加在button上的快捷键),并且将它的Visible属性设为 false。这样,button1的快捷键设置成功。
最近找了一些资料,是讲在C#中设置快捷键运行方法或程序的
要设置快捷键必须使用user32.dll下面的两个方法。
BOOL RegisterHotKey(HWND hWnd,int id,UINT fsModifiers,UINT vk);
和
BOOL UnregisterHotKey(HWND hWnd,int id); 转换成C#代码,那么首先就要引用命名空间System.Runtime.InteropServices;来加载非托管类user32.dll。于是有了:
[DllImport("user32.dll", SetLastError=true)] public static extern bool RegisterHotKey(IntPtr hWnd, // handle to window int id, // hot key identifier KeyModifiers fsModifiers, // key-modifier options Keys vk // virtual-key code );
[DllImport("user32.dll", SetLastError=true)] public static extern bool UnregisterHotKey(IntPtr hWnd, // handle to window int id // hot key identifier );
[Flags()] public enum KeyModifiers { None = 0, Alt = 1, Control = 2, Shift = 4, Windows = 8 }
这是注册和卸载全局快捷键的方法,那么我们只需要在Form_Load的时候加上注册快捷键的语句,在FormClosing的时候卸载全局快 捷键。同时,为了保证剪贴板的内容不受到其他程序调用剪贴板的干扰,在Form_Load的时候,我先将剪贴板里面的内容清空。
于是有了:
private void Form1_Load(object sender, System.EventArgs e){label2.AutoSize = true;
Clipboard.Clear();//先清空剪贴板防止剪贴板里面先复制了其他内容RegisterHotKey(Handle, 100, 0, Keys.F10);}
private void Form1_FormClosing(object sender, FormClosingEventArgs e){UnregisterHotKey(Handle, 100);//卸载快捷键}
那么我们在别的窗口,怎么让按了快捷键以后调用我的主过程ProcessHotkey()呢?
那么我们就必须重写WndProc()方法,通过监视系统消息,来调用过程:
protected override void WndProc(ref Message m)//监视Windows消息{const int WM_HOTKEY = 0x0312;//按快捷键switch (m.Msg){case WM_HOTKEY:ProcessHotkey();//调用主处理程序break;}base.WndProc(ref m);}
有时,我们想让窗体直接接受回车事件,并执行相关按钮的功能,如在登录界面中,我们想在输入用户名和密码后,直接按回车执行【确定】按钮的功能。这如何实现呢?实际上在C#中这件事情变得很简单,只要按照下面的步骤去做就行了。
选中窗体,在属性栏中寻找AcceptButton属性,只要把它的值设置成你想执行的按钮事件就可以了。
这个属性就是当用户按下回车后,指定哪个按钮来执行这个时间处理程序。