Как создать пользовательские ярлыки для DataGridView? - PullRequest
2 голосов
/ 29 ноября 2011

Я пытаюсь создать ярлык (CTRL + J) в элементе управления DataGridView в форме Windows.Ярлык должен просто делать именно то, что делает стрелка вниз (т. Е. В большинстве случаев изменить выбор на следующий элемент).

Я пытаюсь обработать CTRL + J, переопределяя событие формы FormKeyDown ииспользование SendKeys.SendWait("{DOWN}"), если FormKeyDown получает клавишу J и Ctrl в качестве модификатора.

Однако, когда я отправляю клавишу {DOWN}, она действует как Ctrl + Down, поскольку пользователь все еще удерживает клавишу CTRL!

Как создать собственный ярлык, чтобы он действовал точно так же, как и ярлык, который DataGridView уже поддерживает?

1 Ответ

1 голос
/ 29 ноября 2011

Вам не следует полагаться на имитацию пользовательского ввода с помощью SendKeys и вместо этого используйте правильный API для программного выбора, доступного в классе DataGridView. Вы можете проверить раздел программного выбора на следующей странице:

Режимы выбора в элементе управления Windows Forms DataGridView

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


В качестве альтернативы вы можете создать подкласс из DataGridView и реализовать свои собственные ярлыки, чтобы они перенаправляли на существующие. Пример:

public class MyDataGridView : DataGridView
{
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == (Keys.Control | Keys.J))
        {
            this.ProcessDownKey(Keys.Down);

            return true;
        }

        return base.ProcessCmdKey(ref msg, keyData);
    }
}
...