2013-04-05 53 views
0

我有一個搜索框和一個datagridview與結果的窗體。 我需要的是每當我按下字符或數字鍵,然後處理鍵時,始終獲得焦點的搜索框。所以,舉例來說,如果我的焦點在數據網格上,並且按下一個字符,它就會進入搜索框。 (另外,無論何時在表單中按下向上或向下箭頭,焦點都會轉到數據網格,但我沒有問題。)如何更改窗體內的焦點並使新控件處理按鍵?

現在,下面的代碼將用作字符的魅力。但是,當我看到數字時,我無法按照相同的方式進行操作(因爲我的e.KeyCode.ToString()不會給我這個號碼,而是一個「d0」或「numpad0」)。

private void Form_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (!this.tbxSearch.Focused) 
     { 
      if ((e.KeyCode >= Keys.A) && (e.KeyCode <= Keys.Z)) 
      { 
       this.tbxSearch.Focus(); 
       this.tbxSearch.Text = (e.Shift) ? e.KeyCode.ToString() : e.KeyCode.ToString().ToLower(); 
       this.tbxSearch.SelectionStart = this.tbxSearch.Text.Length; 
      } 
     } 
    } 

當然,我可能做到這一點幾乎以同樣的方式,而簡單地得到在「e.KeyCode.ToString()」的最後一個字符,但它似乎不好嗎給我。我的意思是,必須有一個簡單的方法來改變焦點,然後讓控制權處理按鍵。

我試圖使它在PreviewKeyDown事件,但它不會被形式(甚至與KeyPreview屬性設置爲true)被觸發:

private void Form_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
    { 
     if ((e.KeyCode == Keys.Down) || (e.KeyCode == Keys.Up)) 
      this.dgvResults.Focus(); 
     else 
      this.tbxSearch.Focus(); 
    } 

所以,我在想:如何我可以改變表單的焦點並讓新控件處理關鍵嗎?

+0

你試過e.KeyValue?關於諸如Keys.Delete或Keys.Back之類的特殊鍵?和修改鍵(我的意思就像當e.Modifiers == Keys.Control)? – Arie 2013-04-05 13:30:24

+0

我試過了,但e.KeyValue給出了一個int,而不是char;我不關心特殊鍵,只關於字母數字,所以我不會處理這些情況。 – cassiorgr 2013-04-05 14:10:34

回答

0

可以檢查一個關鍵是這樣一個數字:

private Keys[] numericKeys = 
     { 
      Keys.D1, 
      Keys.D2, 
      Keys.D3, 
      Keys.D4, 
      Keys.D5, 
      Keys.D6, 
      Keys.D7, 
      Keys.D8, 
      Keys.D9, 
      Keys.D0, 
      Keys.NumPad0, 
      Keys.NumPad1, 
      Keys.NumPad2, 
      Keys.NumPad3, 
      Keys.NumPad4, 
      Keys.NumPad5, 
      Keys.NumPad6, 
      Keys.NumPad7, 
      Keys.NumPad8, 
      Keys.NumPad9 
}; 

... 

bool isDigit = numericKeys.Contains(e.KeyCode); 

或像這樣:

bool isDigit = Char.IsDigit((char)e.KeyCode); 

或:

bool isLetterOrDigit = char.IsDigit((char)e.KeyCode); 
+0

Arie,對不起,我的問題不是要確認密鑰是否是數字,而是將它添加到文本框中。然而,你對製作(char)演員的建議,對於常規鍵盤上的數字,但對於數字小鍵盤來說,工作得非常好......它轉換爲「a」..「我」 – cassiorgr 2013-04-05 16:32:41

相關問題