c#需要if语句来检查空格和按下的箭头键

时间:2014-04-03 12:16:47

标签: c#

if (e.KeyCode == Keys.Space && e.KeyCode == Keys.Right)
{
    //do stuff 
}

基本上它不是同时按下空格键和右箭头键。

3 个答案:

答案 0 :(得分:3)

您需要了解结果代码是否包含您需要的所有密钥(因为它是在同一时刻按下多个密钥的聚合结果)

所以你可以这样做:

if((e.KeyCode | Keys.Space == e.KeyCode) && 
      (e.KeyCode | Keys.Right== e.KeyCode)) //BINARY OR EXECUTION 

OR

x  y  result
------------
1  1     1
1  0     1 //CHANGED !=x
0  1     1 //CHANGED !=x
0  0     

基本思路是:如果我对其中的另一个号码执行二进制OR ,则结果必须与原始号码相同。

答案 1 :(得分:1)

标准.Net框架不允许您直接检查是否按下了多个键(除了修改键,如Ctrl,Shift和Alt)。

至少有三种可能的解决方案:

  1. 维护您感兴趣的键的自己的状态数组,并更新每个KeyDown和KeyUp事件的状态。然后,您将知道任何KeyDown事件时哪些键已关闭。

  2. 在您的KeyDown处理程序use P/Invoke to call the Windows API GetKeyboardState() function中检查您感兴趣的所有密钥的状态。

  3. 在您的KeyDown处理程序use P/Invoke to call the Windows API GetKeyState() function中确定您感兴趣的每个密钥的密钥状态。

  4. 也许打电话给GetKeyboardState()最方便。

    例如,声明P / Invoke:

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool GetKeyboardState(byte[] lpKeyState);
    

    KeyDown处理程序内部执行以下操作:

    byte[] keys = new byte[255];
    GetKeyboardState(keys);
    
    // keys[x] will be 129 if the key defined by x is down.
    
    if ((keys[(int)Keys.Space] == 129) && (keys[(int)Keys.Right] == 129))
        ... Space and Right are both pressed
    

    请阅读the comments on PInvoke.Net以获取警告和进一步的建议。

答案 2 :(得分:0)

你必须这样做

if((e.KeyCode | Keys.Space == e.KeyCode) && (e.KeyCode | Keys.Right== e.KeyCode))