我有一个带有搜索框的表单和一个带有结果的 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();
}
所以我想知道:我怎样才能改变表单的焦点,让新的控件处理关键?