2016-09-28 31 views
-1
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按鈕內,因此可以更容易,而不是從原來的再次複製整個代碼到熱鍵? –

回答

1

如果直接在您的按鈕使用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用戶從鍵盤加用類似的方式按鈕單擊事件和相應的按鈕任何操作。