C#-c# winfrom小程序,键盘不响应向上向下几个方向键

C#-c# winfrom小程序,键盘不响应向上向下几个方向键

晚风撩人 发布于 2016-10-29 字数 883 浏览 1378 回复 6

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;
}
}

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

想挽留 2017-09-01 6 楼

我的电脑可以响应呀,你检查下你的方向键是否被锁了!

虐人心 2017-07-15 5 楼

窗体上还有别的控件吗,我开始也不响应,怀疑是焦点不在窗体上。。。。。
解决方法:把窗体的KeyPreview属性改成true就可以了。

夜无邪 2017-07-13 4 楼

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;
}
}

甜柠檬 2016-11-21 3 楼

在Form2_KeyDown方法前设置断点,然后运行程序,并按方向键,程序跳到断点位置后,按F11单步执行,并查看e.KeyCode此时的值(比如e.KeyCode为38),然后把"case Keys.Up:"改为"case 38:"。一步一步调试看看呗

虐人心 2016-11-03 2 楼

添加几个Button用来标识上下左右啊。。。然后按下F5去debug看看啊

甜柠檬 2016-10-30 1 楼

原因:方向键是作为系统键来处理的,默认方向键的作用是移动焦点,系统处理完了就不会将键盘的键值传递个窗体或获取焦点的控件,也不会触发窗体的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);

}