C# 如何将 ProcessCmdKey 设为 public 方法

C# how to make ProcessCmdKey as public method

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        switch (keyData)
        {
            case Keys.NumPad0:
                TheAddingResult(0);
                return true;

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

我正在制作一个计算器,我想将每个按钮分配给某个热键,但我做不到,我必须使用这种方式,这不是很有用,有一种方法可以使用这种方法就像它是任何 public 方法一样?就像在 button_click 事件中 keydata = keys.numpad0 或键入例如 processcmdkey(keys.numpad0) 是可能的吗?

编辑: 有人写了这段代码然后删除了我喜欢它但我只想知道在调用它时在第一个参数中输入什么

     public bool hotkeys(ref Message msg, Keys keyData)
    {
        return ProcessCmdKey(ref msg, keyData);
    }
     private void button17_Click(object sender, EventArgs e)
    {
        hotkeys(ref  ,Keys.Back);
        erasingall();
    }

召唤时第一个参数应该输入什么?

如果您直接在按钮中单击,请使用 ClickEvent 并在订阅者内部使用适当的参数执行您的方法。可能你必须将 class 作为依赖注入持有他的方法,或者使方法静态静态,或者直接在部分 class 中创建它。例如,类似于:

 private void ButtonPlusClick(object sender, EventArgs e)
    {
        this.operationsContainer.Execute(Constants.PlusSign);
    }

其中 operationsContainer 是保存操作方法的 class。

如果您还想直接从键盘输入,可以从表单属性中将 KeyPreview 设置为 True,然后使用 FormDetectKeyPress 等按键事件。例如:

private void FormDetectKeyPress(object sender, KeyPressEventArgs e)
    {
        var pressedKeyValue = e.KeyChar;
        switch (pressedKeyValue)
        {
            case '+':
                {
                    this.ButtonPlusClick(sender, null);
                }

                break;
           default:
                return;

          }

您可以在 FormDetectKeyPress 订阅者中以类似的方式添加任何带有按钮单击事件的操作以及来自键盘的相应按钮。