2011-08-09 31 views
0

我有一個倒數計時器 - 用戶輸入數值,然後它開始一個新的表格 - 一個基於從第一個表單中選擇的單選按鈕的最小尺寸或最大尺寸。用戶控制窗體上有按鈕來暫停/停止計時器等。但是,如果按鍵盤按鈕的操作相同,我也要添加。C#按鍵問題?

這裏是點擊暫停按鈕的代碼...

private void btnPause_Click (object sender, EventArgs e) 
    { 
     _CountdownTimer.Pause(); 
    } 

這工作得很好,如果點擊暫停按鈕將暫停計時器。然後我試着爲KeyDown添加下面的代碼 - 有誰知道爲什麼這不起作用?當我按p它只是繼續倒計時.....

謝謝。

private void btnPause_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode.ToString() == "p") 
     { 
      _CountdownTimer.Pause(); 
     } 
    } 

回答

2

KeyDown事件提供虛擬鍵。像Keys.P.如果你想檢測輸入鍵,比如「p」,那麼你應該使用KeyPressed事件。

但這不是正確的方法。 Button控件已經知道你要顯示和處理快捷鍵。將其Text屬性設置爲&暫停。 &字符指示助記符,只要用戶按住Alt鍵,P就會加下劃線。然後按Alt + P自動調用Click事件。 Windows用戶界面標準,不需要教育用戶。這樣做的另一個重要優勢是該按鈕不必集中。你不必編寫任何代碼。推薦的。

2

這是因爲e.KeyCode.ToString()不回「P」 正確的代碼是:

private void btnPause_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.P) 
     { 
      _CountdownTimer.Pause(); 
     } 
    } 

您應該使用調試器,設置斷點,以確保該事件fireing。事件確實發生,確保它進入if。

2

正確的屬性是KeyCode

private void btnPause_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.P) 
    { 
     _CountdownTimer.Pause(); 
    } 
} 

,更好地利用Form's KeyDown Event

2

僅當控件具有焦點時纔會觸發KeyDown事件。您應該使用表單中的KeyDown事件來檢查用戶是否正在按p鍵。

此外,e.KeyCode不需要是字符串。只需檢查Keys枚舉。

+0

這需要Form.KeyPreview = true。重寫ProcessCmdKey()是更好的捕鼠器。 –

1

如果我正確的話,你試圖達到的目標是,當用戶在定時器運行時按下「p」按鈕時,需要停止時鐘。在按鈕未被聚焦的情況下,keydown事件將由按鈕的父對象觸發,也就是表單本身。 因此,您需要使用Skomski提出的代碼處理表單的KeyDown事件。

+0

ps.s. KeyUp會更好。只要按下按鈕,keydown就會繼續觸發事件。 – Talke