DataGridView - горячие клавиши для мыши и щелчка для фокусировки на ячейке - PullRequest
1 голос
/ 19 ноября 2010

У меня странная ситуация, когда используются сочетания клавиш для кнопки вместе с сеткой данных. Вот объяснение:

У меня есть winform, в которой есть сетка данных и кнопка сохранения. Кнопка «Сохранить» имеет сочетание клавиш Alt + S. Я ввожу несколько строк в сетку и проверяю все ячейки по нажатию кнопки «Сохранить». Если значение ячейки недопустимо, я установлю фокус на эту ячейку. Вот код, используемый для этого:

  for (var index = 0; index < GridView.Rows.Count; index++)
  {
    var itemRow = GridView.Rows[index];

    if (itemRow.Cells[SomeColumn.Name].Value.ToString() == string.Empty)
    {
       GridView.CurrentCell = itemRow.Cells[SomeColumn.Name];
       GridView.Focus();
    }
  }

Приведенный выше код работает нормально и устанавливает курсор в конкретной ячейке с помощью курсора, когда я нажимаю кнопку сохранения.

Но, когда я использую сочетание клавиш, фокус вообще не устанавливается на ячейку. Я не уверен, почему он так себя ведет.

Из любопытства я проверил событие обзора данных. Событие CellLeave для datagridview вызывается, когда я нажимаю на кнопку сохранения, но когда я использую ярлык для кнопки сохранения, оно не срабатывает.

Почему он так себя ведет? какие-либо входы? Как настроить фокусировку при использовании ярлыков?

Обновление : я сделал трюк для правильной работы. Я добавил код SaveButton.Focus () в событие нажатия кнопки «Сохранить» в качестве первой строки. Это избыточно, но заставляет сетку терять фокус, когда пользователь использует клавишу быстрого доступа для доступа к этой кнопке. Это решение работает нормально, но не уверен, что может быть причиной вышеуказанной ситуации. Все еще ищу ответ. (

1 Ответ

1 голос
/ 19 ноября 2010

Проверьте комбинацию клавиш в событии keyDown DataGridVeiw, затем, если клавиша Alt + S, установите фокус на DatagridVeiw

Обновлен:

 private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
 {
    if (e.KeyData == (Keys.Alt | Keys.S))
    {
         //put your code to validate i.e. what u are trying in button click event
    }
 }
...