2012-06-29 124 views
0

我創建了一個用戶控件,其中包含多個文本框,組合框等。用戶控件託管在一個正常窗體上。我想將鍵盤快捷鍵分配給文本框,組合框。因此,當Ctrl + F一起按下時,焦點將放置在其中一個文本框中。我已經嘗試使用OnPreviewKeyDown來檢查這些鍵,然後在用戶控件上觸發關鍵點方法。調試器甚至不會在窗體上點擊OnPreviewKeyDown方法。我已經在表單上啓用了keyPreview爲true。我在下面提供了一些我的實驗。C#UserControl鍵盤快捷方式

任何人都可以指出我要去哪裏錯了嗎?我不相信這樣的事情是如此困難。我必須錯過簡單的東西。謝謝

protected override void OnPreviewKeyDown(PreviewKeyDownEventArgs e) 
    { 
     Keys k = e.KeyCode; 

     UserControl1.UserControl_KeyPress(k); 
    } 

    public void UserControl_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (e.KeyChar == 'F') 
      tbxHostName.Focus(); 

     switch (e.KeyCode) 
     { 
      case Keys.F: 
       this.cmbxProtocol.Focus(); 
       break; 
      case Keys.H: 
       this.tbxHostName.Focus(); 
       break; 
      default: 
       break; 
     } 
    } 
+1

你知道用戶控件的焦點嗎?其他人可能需要處理表單中的關鍵事件,並使該代碼選擇用戶控件中的文本區域。 – mortb

+0

指示是否這是WPF或Winforms – Indy9000

回答

1

我推薦嘗試KeyDown Event。它需要一個KeyEventArgs參數,其中包含專門用於Ctrl鍵的布爾值(KeyEventArgs.Control)。

對您而言,您會將KeyCode屬性與Keys.F進行比較,看看是否按下了F,並檢查Control是否爲真。例如:

public void UserControl_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Control) 
    { 
     switch (e.KeyCode) 
     { 
      case Keys.F: 
       this.cmbxProtocol.Focus(); 
       break; 
      // Other cases ... 
      default: 
       break; 
     } 
    } 
} 

另外,如果你真的想堅持自己的KeyPress事件,你可以查看靜態Control.ModifierKeys屬性的值,看看是否按下Ctrl鍵,就像這樣:

if((Control.ModifierKeys & Keys.Control) == Keys.Control) 
{ 
    //... 
} 
+0

這工作得很好。謝謝。 – zeencat