Как предотвратить нажатие клавиши Enter от завершения EditMode в DataGridView?

У меня есть пользовательский элемент управления DataGridView в приложении Windows-Forms. Когда пользователь нажимает клавишу Enter, я не хочу, чтобы что-то случилось. Я уже переопределил метод OnKeyPress в своем пользовательском DataGridView, чтобы предотвратить изменение свойства SelectedCell. Это работает хорошо, когда ячейка выбрана, но не редактируется. Однако если при нажатии клавиши Enter ячейка находится в режиме редактирования, событие CellEndEdit по-прежнему вызывается, а свойство SelectedCell впоследствии изменяется.

Как я могу остановить ключ ввода от завершения режима редактирования на моем элементе управления DataGridView?

1 ответ

Решение

Я нашел ответ, благодаря varocarbas, который прокомментировал ниже мой оригинальный вопрос. Я предполагаю, что событие CellEndEdit вызывается где-то после вызова метода ProcessCmdKeys(), но до вызова OnKeyPress() из-за того, что приоритет клавиши ENTER выше, чем у обычного ключа (это командный ключ). Это объясняет, почему я не смог изменить поведение, когда ячейка все еще была в режиме редактирования с помощью OnKeyPress().

Пользовательский DataGridView, который я создал и который предотвращает какие-либо действия после нажатия клавиши ENTER в DataGridView, можно увидеть ниже:

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().

Другие вопросы по тегам