我在Windows窗體項目上工作了一段時間,然後決定嘗試使用鍵盤快捷鍵。一點閱讀後,我算了一下,只寫一個事件處理程序,並將其綁定到窗體的KeyDown事件:對KeyDown事件沒有響應的表單
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.Alt && e.KeyCode == Keys.O)
{
MessageBox.Show("Ctrl+Alt+O: magic!");
}
}
我這樣做,打開Visual Studio設計的屬性面板的好醇」的方式,然後雙擊我的表單的KeyDown事件來生成Form1_KeyDown
事件處理程序。但是在測試我的應用程序時,表單完全沒有響應。Ctrl + Alt + O鍵盤快捷鍵。 Visual Studio設計確實生成的代碼雖然到事件處理程序的窗體綁定:
private void InitializeComponent()
{
// ...
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);
// ...
}
於是,我就加入了Console.WriteLine()
調用處理程序,以檢查它被稱爲可言,但沒有運氣無論是。另外,我嘗試在事件綁定調用(如上所示)上設置一個斷點,並發現程序到達該斷點就好了。但是我在方法定義本身中設置的任何斷點永遠都不會到達。
爲了確保我在做正確的前幾個步驟,我試着重複他們:
在同解的新形式。
同一個問題:當我按下Ctrl鍵+ Alt鍵+Ø鍵盤快捷鍵和調試器甚至沒有步入事件處理程序的形式不響應。試了一遍,它的工作原理。一個全新的WinForms解決方案。
它完美地工作:消息對話框出現(Console.WriteLine()
調用也可以)。
所以我很迷茫。什麼阻止了這個項目中的所有表單接收KeyDown事件?
不,所以我改變了它,解決了它!感謝您的回答和文檔鏈接。 – BoltClock 2010-07-03 20:28:50
這是一個黑客攻擊,可以讓VB6程序員快樂。它具有執行順序問題,而是重寫ProcessCmdKey()。 – 2010-07-03 21:31:52
@HansPassant,我找不到任何解釋執行順序問題的東西。 KeyDown + KeyPreview不會看到所有的鍵,這足以解決問題,但執行順序問題又是什麼? – kdbanman 2015-12-08 23:11:28