有三个事件可以用于读取按键:KeyPress、KeyDown和KeyUp。当用户按下一个键并松开时,这三个事件的发生顺序是:KeyDown-KeyPress-KeyUp。
KeyPress事件的参数e中有一个char类型的KeyChar属性,因而此事件常用于判断字符。
注册快捷键
try
{
HotKey.UnregisterHotKey(tiePage.Handle, 200);
HotKey.UnregisterHotKey(tiePage.Handle, 201);
}
catch
{
}
try
{
HotKey.RegisterHotKey(tiePage.Handle, 200, 0, Keys.Left);
HotKey.RegisterHotKey(tiePage.Handle, 201, 0, Keys.Right);
}
catch
{
}
public class HotKey
{
public const int WM_HOTKEY = 0x0312;
[DllImport("user32.dll")]
public static extern bool RegisterHotKey(
IntPtr hWnd, //要定义热键的窗口的句柄
int id, //定义热键ID(不能与其它ID重复)
int fsModifiers, //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
Keys vk //定义热键的内容
);
[DllImport("user32.dll")]
public static extern bool UnregisterHotKey(
IntPtr hWnd, //要取消热键的窗口的句柄
int id //要取消热键的ID
);
}
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case HotKey.WM_HOTKEY:
switch ((Keys)(m.WParam))
{
case Keys.Left: //200
imgBtn_LiftArrow_Click(imgBtn_LiftArrow, EventArgs.Empty);
break;
case Keys.Right: //201
imgBtn_RightArrow_Click(imgBtn_RightArrow, EventArgs.Empty);
break;
}
break;
}
base.WndProc(ref m);
}
方向键不能触发 keydown 事件
确认:Form1的“Keypreview”属性是否为true!
在 vb2005 里面,原来按上下左右的方向键会触发 KeyDown 事件我有 Me.KeyPreview = True ,所以无论焦点在哪都会触发 Me.Keydown 事件不过在添加了按钮等其他东西以后,按方向键只会把焦点从一个按钮转到另一个按钮按其他的键都能触发 Me.KeyDown 事件,好像只有方向键不行有什么办法能让方向键也触发 Me.KeyDown 事件?
某些键,如 Tab、Return、Esc 和箭头键,由控件自动处理。所以当你的窗体添加了其它控件如按钮,checkbox等,form的keydown事件就触发不了,为使这些键引发窗体的KeyDown事件,你需要重写form.ProcessDialogKey函数,这个函数可以在消息预处理期间 处理对话字符,例如TAB、RETURN、ESCAPE和箭头键等,以下是我重写了这个事件来处理方向键,你需要把它放到你的代码里:Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean If keyData = Keys.Left Or keyData = Keys.Right Or keyData = Keys.Up Or keyData = Keys.Down Then Return False'如果是方向键返回FALSE,意思是继续执行form的keydown事件. Else Return MyBase.ProcessDialogKey(keyData) End If End Function