Ячейка в режиме редактирования не запускает событие OnKeyDown в C#
Я сделал собственный элемент управления datagridview, который ovveride событие OnKeyDown:
public partial class PMGrid : DataGridView
{
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true; //suppress ENTER
//SendKeys.Send("{Tab}"); //Next column (or row)
base.OnKeyDown(e);
}
else if (e.KeyCode == Keys.Tab)
{
base.OnKeyDown(e);
this.BeginEdit(false);
}
else
{
base.OnKeyDown(e);
}
}
}
Когда я щелкаю на datagridview и нажимаю Enter, он отлично работает, потому что строка не изменяется и запускается событие KeyUp. Но когда я нажимаю клавишу Tab, выбирается следующая ячейка, и она меняется на EditMode. И когда я нажимаю Enter в этой ячейке, событие KeyUp не запускается и KeyPress тоже. Я пытаюсь сделать так, чтобы пользователь мог перейти из одной ячейки в следующую, а затем пользователь может что-то записать в эту ячейку, а затем, когда пользователь нажимает Enter, это значение сохраняется в базе данных. Но когда ячейка находится в режиме редактирования, я не могу обнаружить этого пользователя, нажав Enter.
Спасибо
1 ответ
Вы должны вызвать событие KeyPress или KeyUp в событии EditingControlShowing вида сетки данных. Примерно так должно работать:
private void dtgrd1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
var txtEdit = (TextBox)e.Control;
txtEdit.KeyPress += EditKeyPress; //where EditKeyPress is your keypress event
}
private void EditKeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true; //suppress ENTER
//SendKeys.Send("{Tab}"); //Next column (or row)
base.OnKeyDown(e);
}
else if (e.KeyCode == Keys.Tab)
{
base.OnKeyDown(e);
this.BeginEdit(false);
}
else
{
base.OnKeyDown(e);
}
}
Дайте мне знать, если у вас есть какие-либо сомнения при реализации этого кода.
РЕДАКТИРОВАТЬ
Чтобы избежать перехода к следующей строке при вводе, проверьте этот решенный вопрос: как предотвратить переход к следующей строке после редактирования DataGridViewTextBoxColumn и нажатия EnterKey?