当需要持续、切换点击鼠标时,鼠标结合键盘的操作效率会更高,因此记录下窗体KeyDown和KeyUp时遇到的一些小问题
1、窗体的KeyPreview属性需要设置为true
2、将keyPreview值设置成true后按功能键和数字键都没有问题,但是按方向键任然没有触发KeyDown事件?
解决:覆盖默认的系统键处理方式,遇到方向键,则直接返回,系统不处理,这样键值就会被传递到窗体,触发KeyDown事件。
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Up || keyData == Keys.Down ||
keyData == Keys.Left || keyData == Keys.Right)
return false;
else
return base.ProcessDialogKey(keyData);
}
3、当按下空格键时,会把窗体中获取焦点的控件(比如按钮,文本框等)的单击事件触发,需要屏蔽这个现象
if (e.KeyCode == Keys.Space)
{
e.Handled = true;//表示已经处理了键盘消息
}
窗体事件:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Space)
{
#region 窗体相关操作
if (dicQQDJ.ContainsKey(currentPic))
pictureDJ.Image = (Image)dicQQDJ[currentPic];
#endregion
e.Handled = true;//表示已经处理了键盘消息,屏蔽其他控件时间
}
else if (e.KeyCode == Keys.Left)
{
btnUp_Click(null, null);
}
else if (e.KeyCode == Keys.Right)
{
btnDown_Click(null, null);
}
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Space)
{
#region 窗体相关操作
if (dicQQDJ.ContainsKey(currentPic))
pictureDJ.Image = (Image)dicHQDJ[currentPic];
#endregion
e.Handled = true;//表示已经处理了键盘消息,屏蔽其他控件时间
}
}
Reference: