我在Windows窗体应用程序中有一个自定义DataGridView控件。当用户按下Enter键时,我不希望发生任何事情。我已经在自定义DataGridView中重写了OnKeyPress方法,以防止SelectedCell属性发生更改。当选择单元格但未编辑时,这可以正常工作。但是,如果按下Enter键时单元格处于编辑模式,则仍会触发CellEndEdit事件,并随后更改SelectedCell属性。
如何在我的DataGridView控件上停止Enter键结束编辑模式?
答案 0 :(得分:4)
我找到了答案,感谢varocarbas,他在我原来的问题下面发表了评论。我的假设是CellEndEdit事件在ProcessCmdKeys()方法调用之后但在OnKeyPress()调用之前的某处被触发,因为ENTER键的优先级高于普通键(它是一个Command键)。这解释了为什么当单元格仍然在使用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()方法的覆盖不再必要。