C#如何让ProcessCmdKey和公共方法

问题描述:

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)是可能的?C#如何让ProcessCmdKey和公共方法

编辑: 有人写了这个代码,然后删除它,我喜欢它,但我只是想知道在第一个参数键入召唤它

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

时候我应该在第一个参数时,键入召唤?

+0

究竟为什么这种方法不适合你有用吗?它在类似的情况下帮了我很多。 –

+0

问题是我有一个像在做一些事情计算器中的“+”按钮,如果有任何简单的方法来喜欢召唤给ProcessCmdKey按钮内,因此可以更容易,而不是从原来的再次复制整个代码到热键? –

如果直接在您的按钮使用ClickEvent点击和用户内部使用适当的参数执行你的方法。可能你必须注入作为依赖的类持有他的方法,或使该方法静态静态,或直接在部分类中创建它。例如,如:

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

其中operationsContainer是持有操作方法的类。

如果您还想直接从键盘输入的输入,你可以从的KeyPreview表单的特性真,然后使用事件像FormDetectKeyPress按键。例如:

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

       break; 
      default: 
       return; 

      } 

您可以在FormDetectKeyPress用户从键盘加用类似的方式按钮单击事件和相应的按钮任何操作。