2

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

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

4

1 回答 1

4

感谢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() 方法的覆盖变得不必要。

于 2013-10-28T12:29:40.890 回答