如何在Winform中通过数字键盘键控制按钮

本文关键字:键盘 数字 控制 按钮 Winform | 更新日期: 2023-09-27 18:00:28

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

示例:

如果按下数字键盘键0,则按钮0将被触发。

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
}

在我的表单中,我有一个拆分容器,然后所有按钮都位于一个组框中。

如何在Winform中通过数字键盘键控制按钮

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();
}

我还没有测试过,但这就是我应该如何做的。

为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等作为数字键盘键。有关密钥枚举,请参阅MSDN。

如果要防止执行按键默认操作,请设置如上所示的e.Handled = true

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

使用ProcessCmdkey解决问题:

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

感谢