2011-06-28 71 views
3

我有這個要求,用戶需要使用鍵盤數字鍵盤鍵來控制分配給它的特定按鈕並執行每個功能。如何通過Winform中的數字鍵控制按鈕?

例如:

如果Numpad鍵0按下,則Button0將被觸發。

或者

if(Numpad0 is pressed) 
{ 
//do stuff 
    if (inputStatus) 
     { 
      txtInput.Text += btn0.Text; 
     } 
     else 
     { 
      txtInput.Text = btn0.Text; 
      inputStatus = true; 
     } 
} 
else if(Numpad1 is pressed) 
{ 
//do stuff 
} 

在我的形式,我有一個分裂的容器,那麼所有的按鈕都位於一組框。

回答

0

通過使用ProcessCmdkey解決了這一問題:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
     {  
      if (keyData == Keys.Numpad0) 
       { 
        Numpad0.PerformClick(); 
        return true; 
       } 

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

由於

1

添加窗口處理程序keydown事件:

private void Window_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys./*numpad keys*/) 
    { 
     // do something such as call the click handler for your button! 
     e.Handled = true; 
    } 
} 

或者你可以爲表做它,而不是!你沒有指定,但邏輯是相同的。

並且不要忘記打開KeyPreview。數字鍵盤鍵使用Keys.NumPad0,Keys.NumPad1等。有關Keys Enumeration,請參閱MSDN。

如果要防止正在執行的按鍵默認操作設置爲e.Handled = true,如上所示。

1

將窗體的KeyPreview設置爲true並處理Form.KeyDown事件。

private void Form_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.NumPad0) 
    { 
     Button0.PerformClick() 
     e.Handled = true; 
    } 
    else if (e.KeyCode == Keys.NumPad1) 
    {...} 
    ... 
} 
2

設置KeyPreviewtrue和處理KeyDown

private void Form_KeyDown(object sender, KeyDownEventArgs e) { 
    if(e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) 
     ((Button) this["Button" + (e.KeyCode - Keys.NumPad0).ToString()]).PerformClick(); 
} 

我沒有測試過,但這就是我會怎麼做。

相關問題