如何通过Winform中的Numpad键控制按钮?

时间:2011-06-28 01:26:43

标签: c# winforms keyboard

我有这个要求,用户需要使用键盘小键盘来控制分配给它的特定按钮并执行每个功能。

示例:

如果按下Numpad键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 个答案:

答案 0 :(得分:2)

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 :(得分:1)

为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.NumPad0Keys.NumPad1等作为数字键盘键。有关Keys Enumeration的信息,请参阅MSDN。

如果您想阻止正在执行的键默认操作设置为e.Handled = true,如上所示。

答案 2 :(得分:1)

将表单的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)
    {...}
    ...
}

答案 3 :(得分:0)

通过使用ProcessCmdkey解决问题:

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

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

由于