我有一個MDI父窗體。當用戶按下Enter時,我希望應用程序關閉。假keyvalues通過keydown事件
我檢查keydown事件如下:
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == (int)Keys.Enter)
{
Application.Exit();
}
}
現在它工作正常,當我沒有對的形式(按鈕,文本框等)的任何點擊控制。 e.KeyValue
具有輸入密鑰(13)的(int)
值。但是,如果我將一些按鈕或文本框放在MDI窗體上,則e.KeyValue
會帶來Alt
鍵的密鑰值,即18。
所以,現在如果我按Alt+Enter
,窗體關閉;但提前
是的,它工作完美。我只是通過交換_KEYUP和_ENTER來編輯你的答案。因爲m.MSG會給_KEYUP而不是_ENTER。 – Marshal 2011-04-23 03:42:02
我仍然想知道,爲什麼呢? 我會在幾分鐘內接受它作爲答案。我只是在等待有人回答我的'爲什麼這樣'的部分! – Marshal 2011-04-23 03:42:29
該鍵由當前擁有焦點的控件處理。 因此,如果按下「Enter」鍵 - 重點控制將首先處理密鑰。如果您使用附加鍵「Alt」 - 它不強制集中控制來處理密鑰。 你也可以嘗試「Ctrl」+「Enter」 - 它也應該由表單處理。有一個特殊的Form.KeyPreview屬性,但它看起來在大多數情況下工作不正常。因此,在任何控制之前,您應該在窗體中重寫ProcessKeyPreview或ProcessDialogKey方法以處理鍵。 – 2011-04-23 03:57:51