2011-12-16 5 views
4

나는 이것을 어떻게하는지 잘 모릅니다.동시에 두 개의 키를 누를 때를 감지합니다.

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

아래 다음 키에 부울을 설정 키를 백업에 되돌릴 타이머 XD가 필요하지 않습니다 해제되었습니다. – ThePower

답변

8

당신이를 keyDown /의 keyup 이벤트를 추적 할 수 있고, 현재 "아래"있는 모든 키의 목록을 유지 :

나는 하나의 키를 감지 않는 유일한 방법을 알고있다. 키보드 처리기는 개별 키에서만 트리거 할 수 있으며 코드가 다운되어 있는지 추적하고 해당 키 입력 이벤트가 서로 충분히 가까워서 "함께"계산되도록하는 것은 코드에 달려 있습니다.

3

두 개의 키가 눌려 졌는지 감지하려면 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'로 평가되지 않습니다. –

관련 문제