我有一个搜索框和一个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();
}
所以,我在想:如何我可以改变表单的焦点并让新控件处理关键吗?
你试过e.KeyValue?关于诸如Keys.Delete或Keys.Back之类的特殊键?和修改键(我的意思就像当e.Modifiers == Keys.Control)? – Arie 2013-04-05 13:30:24
我试过了,但e.KeyValue给出了一个int,而不是char;我不关心特殊键,只关于字母数字,所以我不会处理这些情况。 – cassiorgr 2013-04-05 14:10:34