我有一個搜索框和一個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