2011-06-05 130 views
6

我在組合框中有自動完成選項的小問題。一切工作正確的,但我想工作它指出錯誤:)C中的組合框和自動完成#

當我開始在組合框中鍵入,autusuggest工作我喜歡的方式:

Combo

但是,當我第一次打開組合框,和然後開始打字我得到類似的東西:

enter image description here

更重要的是我無法從自動提示組合框挑項目,只能從下面這個列表。

AutocompleteMode是SuggestAppend

我想有自動提示喜歡上了第一張照片,並在如畫2的情況下,此第一框列表應該得到某種封閉..

回答

12

我有同樣的問題,解決這樣說:

private void comboBox_DropDown(object sender, EventArgs e) 
{ 
    ComboBox cbo = (ComboBox)sender; 
    cbo.PreviewKeyDown += new PreviewKeyDownEventHandler(comboBox_PreviewKeyDown); 
} 

private void comboBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
{ 
    ComboBox cbo = (ComboBox)sender; 
    cbo.PreviewKeyDown -= comboBox_PreviewKeyDown; 
    if (cbo.DroppedDown) cbo.Focus(); 
} 

一旦在DropDown用戶點擊按鈕PreviewKeyDown事件附加到ComboBox。當用戶開始輸入時,觸發新添加的事件。在這種情況下,我們檢查ComboBox是否爲DroppedDown,如果是,請關注ComboBox。在ComboBox重點DropDown消失,就是這樣。

+1

這工作完美! – 2014-10-23 19:42:25

2

你嘗試其他AutoCompleteMode的可能值爲Append,NoneSuggest?我認爲你正在尋找的是Suggest而不是AppendSuggest

這裏是一些downloadable sample code說明不同的模式,如果你需要它。

+0

我試過了。追加是顯示其餘的值,並建議這是新的組合框窗口。我想用推薦模式來創建這個新的組合框。但是,這個第一個名單應該關閉.. – Elfoc 2011-06-05 14:59:39

5

如何使用DropDownDropDownClosed事件來禁用或更改自動完成模式?

+4

是的,這對我很有幫助。以下是您可以使用的一些代碼: 'm_cmbNode.DropDown + =(sender,e)=> m_cmbNode.AutoCompleteMode = AutoCompleteMode.None; m_cmbNode.DropDownClosed + =(sender,e)=> m_cmbNode.AutoCompleteMode = AutoCompleteMode.SuggestAppend;' – bsegraves 2012-04-16 14:07:55

+1

這應該被標記爲答案 – waltmagic 2015-01-14 22:08:17

3

我有完全相同的問題。 我嘗試了DropDown和DropDownClosed事件來將AutoCompleteMode屬性設置爲none並提示。 在這種情況下,使用鼠標選擇項目後,SelectedIndexChanged事件不會被觸發。 我在SelectedIndexChanged事件中使用了SelectedValue屬性,此屬性在DropDownClosed事件觸發時已經更改。 在我的情況下,我只是從DropDownClosed事件中調用SelectedIndexChanged方法來解決問題。

2

我還發現默認的UI實現讓人分心,因爲兩個下拉菜單爲鼠標控制而戰。

想要在顯示自動填充建議時隱藏下拉列表。在顯示自動填充建議之前,組合框會顯示一條窗口消息。爲了響應此消息,我選擇了摺疊下拉列表。它需要一個很小的組合框覆蓋來達到這個目的:

Public Class Combobox2 
    Inherits ComboBox 

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
     If m.Msg = 135 AndAlso DroppedDown Then 'WM_GETDLGCODE 
      DroppedDown = False 
     End If 
     MyBase.WndProc(m) 
    End Sub 

End Class 
3

在ComboBox KeyDown上實現事件。它應該看起來像這樣。

void cmbExample_KeyDown(object sender, KeyEventArgs e) 
    { 
     if ((sender as ComboBox).DroppedDown) 
      (sender as ComboBox).DroppedDown = false; 
    } 
0
void cmbExample_KeyDown(object sender, KeyEventArgs e) 
{ 
    cmbExample.DroppedDown = false; 
}