感谢varocarbas,我找到了答案,他在我原来的问题下方发表了评论。我的假设是 CellEndEdit 事件在 ProcessCmdKeys() 方法调用之后但在 OnKeyPress() 调用之前的某处被触发,因为 ENTER 键的优先级高于普通键(它是命令键)。这解释了为什么当单元格仍处于 EditMode 时,我无法使用 OnKeyPress() 更改行为。
我创建的自定义 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() 方法的覆盖变得不必要。