如何防止Enter键按下结束DataGridView中的EditMode?

时间:2013-10-28 10:09:32

标签: vb.net winforms datagridview

我在Windows窗体应用程序中有一个自定义DataGridView控件。当用户按下Enter键时,我不希望发生任何事情。我已经在自定义DataGridView中重写了OnKeyPress方法,以防止SelectedCell属性发生更改。当选择单元格但未编辑时,这可以正常工作。但是,如果按下Enter键时单元格处于编辑模式,则仍会触发CellEndEdit事件,并随后更改SelectedCell属性。

如何在我的DataGridView控件上停止Enter键结束编辑模式?

1 个答案:

答案 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()方法的覆盖不再必要。