C#如何将ProcessCmdKey作为公共方法

时间:2016-09-28 21:06:27

标签: c# methods calculator

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

我正在制作一个计算器,我想将每个按钮分配到某个热键,但我不能这样做,我必须使用这种方式,这是有用的方式,我可以使用这种方法,如果它是任何公共方法?比如在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();
    }

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

1 个答案:

答案 0 :(得分:1)

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

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

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

如果您还想直接从键盘输入输入,可以从表单的属性中使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订阅者中键盘上的相应按钮。