在表單我有一些按鈕的面板。當單擊button1時,我用一個帶有標籤的新UserControl替換該面板(例如this.Controls.Clear()
,this.Controls.Add(UserControl1)
)。除了我的userControl上的標籤有一個KeyDown處理程序。它工作正常,事件觸發,但不適用於向上,向下,向左和向右鍵。任何人都可以解釋爲什麼這些鍵之間有區別嗎?什麼決定事件是否被解僱?KEYDOWN沒有發射的上,下,左,右
回答
兩個基本原因。首先是神祕的:標籤控件無法獲得焦點,因此無法看到擊鍵。其KeyDown事件隱藏在設計器中的原因。不太確定爲什麼你看到任何按鍵。更常見的原因是光標和TAB鍵用於導航,將焦點從一個控件移動到另一個控件。在之前完成這個鍵被傳遞給控件。您必須重寫控件,以便可以重寫其IsInputKey()方法。但是更實際的情況是,您會覆蓋UserControl的ProcessCmdKey()來解決這兩個問題。
另外請注意,你有你的程序中一個討厭的句柄泄漏。 從不調用Controls.Clear(),而不調用您刪除的控件上的Dispose()方法。除非您打算稍後重用它們,否則不常見。這是垃圾收集器無法解決的一種令人討厭的泄漏,並且在首先使程序變得緩慢且笨拙後最終崩潰。
就是這樣!由於KeyDown事件被按鈕隱藏(要使用按鍵瀏覽按鈕:向上,向下,向左,標籤和輸入點擊),事件並未觸發。在清除控件之前調用panel.Dispose()解決了我的問題。非常感謝你! – alex555 2012-08-01 10:49:54
根據MSDN:
此事件支持.NET Framework基礎,不適合直接從您的代碼使用。
當用戶按下一個鍵時標籤有焦點時發生。
編輯:似乎沒有這種替代事件。從我讀過的,箭頭鍵肯定應該被檢測到。請提供一些代碼。
你應該覆蓋的方法ProcessCmdKey代替。箭頭鍵的處理方式與其他標準鍵不同。另一種解決方案是這樣的:Microsoft建議的http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx。
要處理箭頭鍵,您既可以在窗體的KeyPreview屬性設置爲true,然後在形式層面,而不是具體的控制水平處理它們。我已經這樣做了,它完美無缺!
在的情況下,上述方法不爲你工作,然後再考慮ProcessCmdKey
是這樣的:
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if(KeyData == Keys.Right)
{
//Move Right
return true;
}
else
{
return base.ProcessCmdKey(msg, keyData);
}
}
你沒有提到你的事件在用戶控件或宿主窗體中被處理的位置?如果它們在主機窗體上處理,則在添加用戶控件的新實例時,您需要將所有事件重新註冊到事件句柄。 – Munawar 2012-08-01 08:19:57
- 1. 4 Vector2點左上右上左下右下
- 2. KEYDOWN按下左側的KEYUP
- 3. 滾動子視圖左右,但沒有向上或向下
- 4. 下拉沒有發射OnSelectedIndexChanged
- 5. jQuery邊框圖像(左上角,右上角,左下角,右下角)
- 6. 如何在左下角到右上角反射陣列?
- 7. Windows Phone 7的jQuery Mobile的:按鍵時/ KEYDOWN輸入元素上沒有發射
- 8. 發射所有keydown/up事件contenteditable div
- 9. 左上角和右下角的絲帶
- 10. jQuery的切換左下到右上
- 11. WPF中的填充(左,上,右,下)
- 12. IE 10 keyup/keydown沒有用jquery發射1.10.1
- 13. 沒有左右兒童的JavaFX Borderpane
- 14. Objective-C UITableViewCell左/右/上/下空間
- 15. 通過左右,而不是上下
- 16. 左/右和上/下刷卡導航
- 17. 如何找到左,右,上,下查看
- 18. 沒有共享軸的覆蓋圖:左下角與右上角對(python/matplotlib)
- 19. 沒有發射
- 20. 沒有發射
- 21. 沒有發射
- 22. 沒有發射
- 23. 沒有發射
- 24. 沒有發射
- 25. 沒有發射
- 26. 沒有發射
- 27. 沒有發射
- 28. 沒有發射
- 29. 沒有發射
- 30. 沒有發射
請使用一些代碼來說明你已經寫過的處理程序 – HatSoft 2012-08-01 07:55:08
看看這篇文章,它可能會幫助你:http://stackoverflow.com/questions/1646998/up-down-left-and-right -arrow-keys-do-not-trigger-keydown-event – SidAhmed 2012-08-01 08:00:30