如何在C#中同时检测多个按键?

时间:2010-09-12 13:01:23

标签: c# winforms keypress

我正在为我的游戏制作地图编辑器,并使用箭头键在地图区域滚动。目前我正在使用KeyDown事件,它适用于向上,向下,向左或向右滚动 - 但我的问题是如何允许对角线滚动。目前,如果我按住右箭头然后(同时保持右箭头)我按住向下箭头,向下方向取代向右滚动,而不是向右对角滚动。

例如,有没有办法在KeyDown事件中检查是否按下了另一个箭头键?如何回复所持有的多个密钥?

由于

2 个答案:

答案 0 :(得分:4)

不容易,第二次按键的按键停止第一次按键重复。您需要做的是在KeyDown事件中记录密钥已关闭。在KeyUp事件中取消该状态。接下来,使用一个Timer(~250毫秒)并在其Tick事件中检查键的状态。

答案 1 :(得分:1)

最简单的方法是使用Windows API调用来获取键盘上每个键的状态,然后检查您感兴趣的键:GetKeyboardState via PInvoke

你可以在KeyDown / KeyUp上调用它,检查键盘的状态,并采取适当的行动。