如何在Form中使用方向键
各位神一样的高手请看:
小生最近在做一个小游戏,是winform的,其中少不了要用到方向键;界面上还有几个快捷按钮,问题就出在这里:
当我按方向键的时候,游戏的控制并没有出现,而是不停的在几个快捷键上切换焦点;当然了,用字母键可以解决,或者我猜不要快捷键,改成菜单也许也能解决,但...我相信在目前这种条件下还是可以有办法用到方向键的,请教高手大人!
跟这个类似的还有系统按键的控制问题,比如说Alt,Ctrl等.
问题点数:100、回复次数:18Top
1 楼jiefreeman(zj)回复于 2005-08-03 02:52:15 得分 0
顶一下...Top
2 楼zeusvenus()回复于 2005-08-03 06:22:00 得分 5
可以用keycode=多少来写响应的事件啊Top
3 楼lih163(做自己喜欢的事)回复于 2005-08-03 08:06:34 得分 0
这个呀,keyup可以吗Top
4 楼3tzjq(永不言弃)回复于 2005-08-03 08:50:44 得分 2
KeyCode.Up : 上箭头
KeyCode.Down : 下箭头
KeyCode.Left : 左箭头
KeyCode.Right: 右箭头
....
MSDN里有说明
Top
5 楼3tzjq(永不言弃)回复于 2005-08-03 08:51:55 得分 5
ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemWindowsFormsKeysClassTopic.htmTop
6 楼songhtao(三十年孤独)回复于 2005-08-03 09:17:46 得分 3
在form的KeyDown事件里处理呀。Top
7 楼cdo(Everything has a favourable turn)回复于 2005-08-03 09:25:32 得分 0
呵呵,我也想知道,帮你up一下.Top
8 楼jiefreeman(zj)回复于 2005-08-03 09:54:26 得分 0
可能我没讲明白,是这样的,四楼的大虾说的我用到了,而且已经获得了四个方向键在winform上的keyup事件了,但是,是这样的:
+---------------------+
| |
| +--------+ +------+ |
| | 游 | |button| |
| | 戏 | +------+ |
| | 显 | |
| | 示 | +------+ |
| | 区 | |button| |
| | | +------+ |
| +--------+ |
| |
+---------------------+
这下应该清楚一点了...在这个界面上我想用方向键控制游戏区里的游戏,但是这个界面上还有几个按钮,如果我一按方向键,结果是,只是不停的在按钮上切换焦点,而不是控制游戏区里的游戏.但是如果不用方向键,换成任何一个字母键就可以.
我就是想用方向键对游戏区里的游戏进行控制,而不是在按钮上切换焦点.
大侠们,指点一下迷津吧~~Top
9 楼3tzjq(永不言弃)回复于 2005-08-03 10:02:14 得分 5
这是Windows默认的!你应设界面窗体的KeyPreview = true 并处理base.KeyDown 或 base.KeyPress事件,然后在事件里处理按下键所执行的操作。Top
10 楼jinjazz(近身剪)回复于 2005-08-03 10:11:00 得分 50
const int WM_SYSKEYDOWN=260;
const int WM_KEYDOWN=256;
protected override bool ProcessCmdKey(ref Message msg,Keys keyData)
{
if ((msg.Msg==WM_KEYDOWN)||(msg.Msg==WM_SYSKEYDOWN))
{
switch (keyData)
{
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;
}
}
return true;
}
Top
11 楼drk928(一起看斜阳)回复于 2005-08-03 10:13:14 得分 0
要不要我发一个俄罗斯方块的源代码给你啊?Top
12 楼jiefreeman(zj)回复于 2005-08-03 10:15:03 得分 0
谢谢永不言弃大虾,窗体的KeyPreview=true偶已经设了,但base.KeyDown或base.KeyPress这两个事件我还是第一次听说,能不能稍微讲细一点点.窗子纸就差一点就破了...Top
13 楼jiefreeman(zj)回复于 2005-08-03 10:19:26 得分 0
一起看斜阳,我要我要:)发到我的邮箱里谢了!zj_jie@163.COMTop
14 楼3tzjq(永不言弃)回复于 2005-08-03 10:20:44 得分 5
构造函数中:
this.KeyDown +=new KeyEventHandler(ImportExcelHelper_KeyDown);
处理KeyDown事件:
private void ImportExcelHelper_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;
}
}Top
15 楼jiefreeman(zj)回复于 2005-08-03 10:23:11 得分 0
无比佩服中!先拜一下各位神一样的大虾!Top
16 楼jiefreeman(zj)回复于 2005-08-03 11:02:32 得分 0
充电中,你的这个函数怎么用啊,我看它是重写一个什么函数了,但放在什么地方用呢?(本人自学C#两个月左右,水平不高,不好意思!)Top
17 楼jinjazz(近身剪)回复于 2005-08-04 08:36:32 得分 5
public class Form1 : System.Windows.Forms.Form
{
}
里面Top
18 楼pupo(泡泡)回复于 2005-08-04 08:46:50 得分 20
ProcessCmdKey是Form的一个方法,你重写它就可以了Top




