2012-08-08 114 views
0

當主窗體加載時,我試圖建立一個關鍵的事件處理程序如下:C# - 在Windows窗體keydown事件問題

private void FormMain_Load(object sender, EventArgs e) 
{ 
    KeyDown += FormMain_KeyDown; 
} 

和被調用的函數:

private void FormMain_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Escape) 
    { 
     // Do something. 
    } 
} 

問題是表單對Escape(或其他我試過的鍵)沒有反應。有趣的是,與同一個項目不同的表單使用類似的代碼沒有任何問題。任何人都可以告訴我我做錯了什麼?

回答

6

表單上有一個名爲KeyPreview的屬性,您需要將其設置爲true。 然後在按鍵上您的處理程序將會觸發,然後控件上的任何處理程序都會關注。

+0

謝謝你的回答(它可以讓我在3分鐘內接受)!爲什麼我不需要在另一個表單上將此屬性設置爲true,是否有任何理由? – IneedHelp 2012-08-08 17:16:33

+0

你確定它不是? (或者在某處設置ihn代碼)我自己從來都不是這個伎倆的忠實粉絲,我寧願將重點新聞的窗口消息陷入其中。多年來我的結果都不盡相同,對我來說太脆弱了。 – 2012-08-08 17:20:47

+0

我的項目中沒有使用KeyPreview,除了這一次。這就是爲什麼我想知道它在項目中以不同的形式工作,而不是主要的形式。我有興趣瞭解更多關於您提到的其他方法的信息。你能否提供一些參考資料供我閱讀?謝謝! – IneedHelp 2012-08-08 17:27:03