我找到了答案,這要歸功於varocarbas,他在下面評論我的原始問題。我的假設是CellEndEdit事件在ProcessCmdKeys()方法調用之後的某個地方被觸發,但由於ENTER鍵的優先級高於普通鍵(它是Command鍵),所以在OnKeyPress()調用之前。這就解釋了爲什麼當一個單元格仍處於使用OnKeyPress()的EditMode中時,我無法改變行爲。
,我創建的自定義的DataGridView,防止任何行動發生之後在一個DataGridView的ENTER鍵按下,可以在下面看到:
Public Class clsModifyDataGridView
Inherits Windows.Forms.DataGridView
''' <summary>
''' Changes the behavior in response to a Command-precedence key press
''' </summary>
''' <returns>True if we handled the key-press, otherwise dependent on default behavior</returns>
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
' Was the ENTER key pressed?
If keyData = Keys.Enter Then ' YES
' DO NOTHING
Return True
End If
' Handle all other keys as usual
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
End Class
有人如果請大家指正我的假設成立呼叫序列不足。還要注意,這個ProcessCmdKey()覆蓋使得我之前提到的OnKeyPress()方法的覆蓋是不必要的。
恐怕你必須解釋編輯模式中發生的事情的唯一方法是掛鉤鍵(儘管沒有讓你完全控制這種情況的事件)。在這裏你有一篇文章(在C#中)鏈接到似乎是這個問題的解決方案:http://stackoverflow.com/questions/2527371/how-can-i-change-what-happens-when-enter- key-is-press-on-a-datagridview – varocarbas
謝謝,使用你的鏈接我找到了我正在尋找的答案! –
我很高興得到了幫助。 – varocarbas