2013-04-05 18 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

相关问题