2015-10-27 63 views
3

我有一個TextBox,用戶可以鍵入搜索項和ListBox顯示結果。還有一個按鈕會根據點擊選擇的項目顯示一些信息。使用向上/向下鍵滾動列表框,當文本框具有焦點而不移動光標

我想使用向上和向下箭頭鍵滾動瀏覽列表框,所以用戶不必點擊該項目,然後按鈕。在那一點上,我可能只是依靠雙擊事件來完成這項工作,因爲它們已經在項目上了。不過,我試圖讓這個更「鍵盤友好」。
下面的代碼工作,但有一個小小的瑕疵:

private void txtSearchTerm_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Down && Results.SelectedIndex < (Results.Items.Count - 1)) 
    { 
     Results.SelectedIndex++; 
    } 
    else if (e.KeyCode == Keys.Up && Results.SelectedIndex > 0) 
    { 
     Results.SelectedIndex--; 
    } 
} 

有了這個代碼,光標依然繼續左右連同所選擇的項目改變。我希望它保持在原來的位置(不要強迫它結束)。我沒有與txtSearchTerm.Select(...)事件的任何運氣,但我想我可能錯過了一些東西......

有一個TextChanged事件,但它只是調用我寫的填充列表框中的搜索功能用戶類型,所以爲了簡單起見,我將保留這些代碼。

我錯過了什麼或忽略了一些方法來使這個文本框/列表框組合功能我打算如何?

快速提示:如果您曾經使用UltraEdit,我試圖基本上模仿該配置窗口的行爲。

回答

4

您應該使用e.Handled = true;使用您處理的鍵取消:

private void txtSearchTerm_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Down) 
    { 
     if (Results.SelectedIndex < (Results.Items.Count - 1)) 
      Results.SelectedIndex++; 
     e.Handled = true; 
    } 
    else if (e.KeyCode == Keys.Up) 
    { 
     if (Results.SelectedIndex > 0) 
      Results.SelectedIndex--; 
     e.Handled = true; 
    } 
} 

我設置e.Handled = true;如果該鍵爲Keys.DownKeys.Up不管SelectedIndex的完全禁止使用這些按鍵移動插入符。

+0

神奇的解決方案!謝謝!它總是最簡單的東西,你忽略了... –

+0

不客氣:) –

相關問題