Как я могу отправить одну клавишу Downkey, когда мой пользователь нажимает клавишу ввода Numpad? - PullRequest
5 голосов
/ 23 мая 2011

Это чисто для удобства использования, которое спросили мои клиенты.

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

Вот что я пытался использовать:

private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        SendKeys.Send("{DOWN}");
    }
}

К сожалению, это не работает, как ожидалось. Иногда кажется, что эта клавиша многократно срабатывает, в результате чего фокус прокручивается на 2, 3 или 4 ячейки вниз и действительно встряхивает фокус пользователя.

Как я могу сделать эту работу и сделать моих клиентов счастливыми?

Ответы [ 5 ]

1 голос
/ 08 февраля 2012

Попробуйте - я проверил, и все работает.

private void datagridView12_KeyDown(object sender, KeyEventArgs e) 
{ 
     if (e.KeyCode == Keys.Enter) 
     {
         int col = dataGridView12.CurrentCell.ColumnIndex;
         int row = dataGridView12.CurrentCell.RowIndex;
         if (row != dataGridView12.NewRowIndex)
         {
             if (col == (dataGridView12.Columns.Count - 1))
             {
                 col = -1;
                 row++;
             }

             dataGridView12.CurrentCell = dataGridView12[col, row + 1];
         }

         e.Handled = true;
         base.OnKeyDown(e);
     } 
}
1 голос
/ 22 июня 2011
private void datagridView1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        bindingsource.MoveNext();
    }
}
0 голосов
/ 11 апреля 2012

Когда вы нажимаете Введите в DataGridView (в режиме редактирования или нет), он по умолчанию опускается на одну ячейку (в .NET Framework 3.5 и 4.0).

Разве это не та функциональность, которая вам нужна?

0 голосов
/ 23 мая 2011

Разве вы не можете установить фокус на следующее текстовое поле, когда пользователь нажимает ввод? Вы можете использовать метод TextBox.Focus () для перемещения следующего текстового поля.

0 голосов
/ 23 мая 2011

Вы можете использовать логическое значение, которое имеет значение true для keyDown и значение false для keyUp.

Запускайте свой sendKeys.Send только тогда, когда логическое значение равно true.Это должно гарантировать, что событие запускается только один раз при каждом нажатии клавиши.

Я часто видел, как это происходит на других языках, я не уверен, что есть лучший способ сделать это в C #.

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