2011-12-16 9 views
4

どうすればいいか分かりません。同時に2つのキーが押されたときの検出

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.C) 
    { 
     MessageBox.Show("C key"); 
    } 
} 
+0

がダウンして、キーのブール値を設定し、キーアップでそれを元に戻すタイマーXDを必要としません持ち上げられました。 – ThePower

答えて

8

あなたはKeyDownイベント/ keyUpイベントイベントを追跡する必要があり、現在は「ダウン」しているすべてのキーのリストを保持:

は、私は1つのキーを検出しない唯一の方法を知っています。キーボードハンドラは個々のキーでのみトリガすることができます。また、どのキーがダウンしているかを検出して追跡することは、コードに依存します。

3

ご覧のとおり、2つのキーが押されたかどうかを検出するにはbooleanのタイマーイベントを使用できます。まだそれがキーをしていない意味するようにtrueに設定されている場合

bool keyup = false; 
    bool keyleft = false; 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Up) 
     { 
      keyup = true; 
     } 
     else if (e.KeyCode == Keys.Left) 
     { 
      keyleft = true; 
     } 
    } 

    private void Form1_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Up) 
     { 
      keyup = false; 
     } 
     else if (e.KeyCode == Keys.Left) 
     { 
      keyleft = false; 
     } 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     timer1.Start(); 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     if (keyleft && keyup) 
     { 
      Console.Beep(234, 589); 
     } 
    } 
0

あなたは、

bool keyup = false; 
    bool keyleft = false; 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Up) 
     { 
      keyup = true; 
     } 
     else if (e.KeyCode == Keys.Left) 
     { 
      keyleft = true; 
     } 

     if (keyleft && keyup) 
     { 
      Console.Beep(234, 589); 
     } 
    } 


    private void Form1_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Up) 
     { 
      keyup = false; 
     } 
     else if (e.KeyCode == Keys.Left) 
     { 
      keyleft = false; 
     } 
    } 
+0

'if(keyleft && keyup)'条件は決して 'true'と評価されません。 –

関連する問題