2012-12-27 33 views
1

我正在努力在C#中使用pong,並且遇到了一個問題。我的KeyPreview上,當我按下任何按鍵,這裏是我的代碼KeyPress在整個表單上,不只是一個對象?

private void Form1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == (char)Keys.Up || e.KeyChar == (char)Keys.W) { 
     picPaddle.Top -= 10; 
    } 
    else if (e.KeyChar == (char)Keys.Down || e.KeyChar == (char)Keys.S) { 
     picPaddle.Top += 10; 
    } 
} 

,什麼都不會發生。按鍵工作的唯一時間是測試(char)Keys.Enter的條件。爲什麼是這樣?我怎樣才能讓表單採用KeyPress以外的其他鍵?

+1

在第一個「if」上設置斷點 - 在任何按鍵上執行斷點?如果是這樣,請調查'e'來找出爲什麼你的條件沒有得到滿足的線索。 – overslacked

回答

3

嘗試重寫的KeyDown方法代替:

protected override void OnKeyDown(KeyEventArgs e) { 
    if (e.KeyCode == Keys.Up || e.KeyCode == Keys.W) { 
    picPaddle.Top -= 10; 
    } else if (e.KeyCode == Keys.Down || e.KeyCode == Keys.S) { 
    picPaddle.Top += 10; 
    } 

    base.OnKeyDown(e); 
} 

另見What's the difference between KeyDown and KeyPress in .NET?

+0

這工作,謝謝。現在,研究它爲什麼起作用... – WillumMaguire

+0

@WillumMaguire簡而言之,向上和向下鍵不是字符。 – LarsTech

-1

當控件具有焦點KeyPress事件的作品。 keydown事件allways作品。 =>攔截keydown事件

+0

每個問題都使用表單的KeyPress事件(以及KeyPreview屬性設置爲true)。在這種情況下,KeyDown,KeyPress和KeyUp都可用於表單。 – overslacked

相關問題