c#中设置快捷键

第一种:Alt + *(按钮快捷键)

在大家给buttonlabelmenuStrip等控件设置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属性,只要把它的值设置成你想执行的按钮事件就可以了。

这个属性就是当用户按下回车后,指定哪个按钮来执行这个时间处理程序。

你可能感兴趣的:(快捷键)