Как предотвратить нажатие клавиши 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().