Как управлять кнопками с помощью цифровых клавиш в Winform? - PullRequest
3 голосов
/ 28 июня 2011

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

Пример:

если нажата клавиша 0 на цифровой клавиатуре, нажмитеButton0 будет запущен.

Или

if(Numpad0 is pressed)
{
 //do stuff
  if (inputStatus)
        {
            txtInput.Text += btn0.Text;
        }
        else
        {
            txtInput.Text = btn0.Text;
            inputStatus = true;
        }
}
else if(Numpad1 is pressed)
{
//do stuff
}

В моей форме у меня есть разделенный контейнер, тогда все кнопки расположены в групповом поле.

Ответы [ 4 ]

2 голосов
/ 28 июня 2011

Установите KeyPreview в true и обработайте KeyDown:

private void Form_KeyDown(object sender, KeyDownEventArgs e) {
    if(e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)
        ((Button) this["Button" + (e.KeyCode - Keys.NumPad0).ToString()]).PerformClick();
}

Я не проверял это, но это о том, как я это сделаю.

1 голос
/ 28 июня 2011

Установите KeyPreview формы в true и обработайте событие Form.KeyDown.

private void Form_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.NumPad0)
    {
        Button0.PerformClick()
        e.Handled = true;
    }
    else if (e.KeyCode == Keys.NumPad1)
    {...}
    ...
}
1 голос
/ 28 июня 2011

Добавить обработчик окна для события keydown:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys./*numpad keys*/)
    {
        // do something such as call the click handler for your button!
        e.Handled = true;
    }
}

Или вместо этого вы можете сделать это для Формы! Вы не указали, но логика та же.

И не забудьте включить KeyPreview. Используйте Keys.NumPad0, Keys.NumPad1 и т. Д. Для клавиш цифровой клавиатуры. См. MSDN для перечисления ключей .

Если вы хотите, чтобы действие клавиш по умолчанию не выполнялось, установите e.Handled = true, как показано выше.

0 голосов
/ 28 июня 2011

Использование ProcessCmdkey решает проблему:

 protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {       
           if (keyData == Keys.Numpad0)
                {
                    Numpad0.PerformClick();
                    return true;
                }

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

Спасибо

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