Как обработать Key.Enter и предотвратить изменение строки в WinForms CustomDataGridView - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь остановить клавишу ввода на winforms dataGridView изменения строки, когда ячейка DataGridViewTextBoxColumn находится в edit-mode и нажата кнопка ввода.В противном случае функциональность должна оставаться нормальной.

Мой предпочтительный подход - создать CustomDataGridView и переопределить необходимые методы.Кажется, мой подход заканчивается edit-mode, но без запуска события CellValidating.

В настоящее время это событие используется для проверки ввода пользователя.

  public class CustomDataGridView : DataGridView
  {
    protected override bool ProcessDialogKey(Keys keyData)
    {
      if (keyData == Keys.Enter)
      {
        if (MyProcessDialogKey(keyData)) return true;
      }

      return base.ProcessDialogKey(keyData);
    }

    protected bool MyProcessDialogKey(Keys keyData)
    {

      EndEdit();
      return true;
    }
  }

Как я могу поднять CellValidatingсобытие?Или я должен рассмотреть другой подход?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Вам просто нужно переопределить событие OnKeyDown следующим образом:

protected override void OnKeyDown(KeyEventArgs e)
{
    if ((e.KeyData & Keys.KeyCode) == Keys.Enter)
        return;
    else
        base.OnKeyDown(e);
}
0 голосов
/ 07 июня 2018

Вы можете просто использовать событие KeyDown в DataGridView следующим образом:

private void MyDGV_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
 if(e.KeyCode == Keys.Enter)
  {
    //First process your stuff

    //To stop Keypress from doing anything more:
    e.Handled = true;
  }
}

Больше информации: MSDN

Примечание: есть много событий, где вы можетезавершение обработки с помощью e.Handled = true

Хорошего дня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...