【问题标题】:C# how to make ProcessCmdKey as public methodC# 如何将 ProcessCmdKey 作为公共方法
【发布时间】:2016-09-28 21:06:27
【问题描述】:
    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);
        }
    }

我正在制作一个计算器,我想将每个按钮分配给某个热键,但我做不到,我必须使用这种方法,这不是很有用,有一种方法可以使用这种方法,例如 if这是任何公共方法吗?就像在 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();
    }

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

【问题讨论】:

  • 为什么这个方法对你没用?在类似的情况下,它对我有很大帮助。
  • 问题是我喜欢计算器中的“+”按钮,如果有任何简单的方法可以像在按钮内调用 processcmdkey 这样它可以更容易而不是复制整个再次从原始代码到热键?

标签: c# methods calculator


【解决方案1】:

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

 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 订阅者中以类似的方式添加带有按钮单击事件的任何操作以及来自键盘的相应按钮。

【讨论】:

    猜你喜欢
    • 2013-06-08
    • 2011-04-18
    • 2012-02-11
    • 2011-04-25
    • 2018-11-16
    • 1970-01-01
    • 2011-04-19
    • 2018-05-20
    • 1970-01-01
    相关资源
    最近更新 更多