發生了什麼事是,箭頭鍵導航控件的形式,很像標籤關鍵。每按一次方向鍵,焦點就從當前激活的控制移動到與箭頭鍵相同的相對方向的下一個控制。
箭頭鍵的這種解釋在比您要處理的表單的KeyDown
事件更高的級別上執行。每個按鍵實際上都被ProcessDialogKey
function消耗,這防止了該關鍵事件被傳遞到您的KeyHandling
方法以用於任何進一步處理。
,當你想到當按Ctrl鍵被按下一切工作的原因是ProcessDialogKey
功能不消耗這些事件,允許它們被傳遞到您的事件處理程序方法。方法的documentation告訴我們:
該方法不對包含ALT或CONTROL修飾符的擊鍵進行處理。
如果你不想箭頭鍵你的控件之間只有「點擊」恰如其命名按鈕導航,解決方案應該是顯而易見的:你需要重寫ProcessDialogKey
方法,添加自定義密鑰處理邏輯,並返回「True」值以表示您自己處理密鑰。否則,您將繼續前往基類,以免中斷標準處理如標籤和輸入。同樣,documentation令人耳目一新這裏清楚:
當重寫在派生類中的ProcessDialogKey
方法,控制應返回true,表明它已經處理的關鍵。對於未由控件處理的鍵,應返回調用基類ProcessDialogChar
方法的結果。
只需將下面的代碼添加到您的表單,並刪除KeyHandling
方法你現在有:
Protected Overrides Function ProcessDialogKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean
Select Case keyData
Case Keys.Left
btnPrev.PerformClick()
Return True
Case Keys.Right
btnNext.PerformClick()
Return True
Case Keys.Up
btnFirst.PerformClick()
Return True
Case Keys.Down
btnLast.PerformClick()
Return True
End Select
Return MyBase.ProcessDialogKey(keyData)
End Function
這可能會起作用,但如果可能的話,您應該在容器控制的更高級別上處理此問題。它使得代碼更加優雅和可維護。 – 2011-01-08 15:02:29