C#-c# winfrom小程序,键盘不响应向上向下几个方向键
C# winfrom小程序,在窗体上添加键盘事件,已经设置了属性KeyPreview=True;窗体上同时存在一些其他的按钮控件。然后:
private void Form2_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up:
MessageBox.Show("Up");
break;
case Keys.Down:
MessageBox.Show("Down");
break;
case Keys.Left:
MessageBox.Show("Left");
break;
case Keys.Right:
MessageBox.Show("Right");
break;
default:
MessageBox.Show("other keys");
break;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我的电脑可以响应呀,你检查下你的方向键是否被锁了!
窗体上还有别的控件吗,我开始也不响应,怀疑是焦点不在窗体上。。。。。
解决方法:把窗体的KeyPreview属性改成true就可以了。
1.可能你没有添加事件绑定,
2.事件不对
四个方向键算是比较特殊的按键了.
在WinFrom中,使用方向键会切换标点,从而导致捕获不到(个人理解)
如果要捕获这几个按键,可以添加PreviewKeyDown事件
首先新建一个事件,然后写上对应代码,在设计器中按住Ctrl+A全选所有控件,然后将事件绑定就可以了
private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up:
case Keys.Down:
case Keys.Left:
case Keys.Right:
MessageBox.Show(e.KeyCode.ToString());
break;
}
}
在Form2_KeyDown方法前设置断点,然后运行程序,并按方向键,程序跳到断点位置后,按F11单步执行,并查看e.KeyCode此时的值(比如e.KeyCode为38),然后把"case Keys.Up:"改为"case 38:"。一步一步调试看看呗
添加几个Button用来标识上下左右啊。。。然后按下F5去debug看看啊
原因:方向键是作为系统键来处理的,默认方向键的作用是移动焦点,系统处理完了就不会将键盘的键值传递个窗体或获取焦点的控件,也不会触发窗体的KeyDown事件。 在没有控件的时候没有其他的控件可以移动焦点,系统不处理,这才会将键值传递给窗体,触发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);
}