2015-06-25 50 views
1

我希望我的組合框啓用自動完成功能,如果用戶正在鍵入的內容位於項目列表中,並且如果它不存在,我想將其包含在我的列表中。組合框 - 自動完成+自由輸入

例如:

組合框與這些項目: 「搖滾,鄉村,爵士」。 如果用戶開始鍵入「Ro ...」組合框自動完成到「搖滾」。但如果用戶輸入「藍調」,我想將其添加到我的項目。所以它會像:「搖滾,鄉村,爵士,布魯斯」。

我該怎麼做?

回答

3

您可以使用AutoCompleteModeAutoCompleteSource用於自動完成。

comboBox1.AutoCompleteMode = AutoCompleteMode.Append; 
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems; 

,或者你可以在Visual Studio中選擇您的組合框後,通過屬性面板做到這一點...

對於增加新的項目到您的組合框;

private void comboBox1_TextChanged(object sender, EventArgs e) 
    { 
     if (!comboBox1.Items.Contains(comboBox1.Text)) 
     { 
      comboBox1.Items.Add(comboBox1.Text); 
      comboBox1.Items.RemoveAt(comboBox1.Items.Count - 2); 
     } 
    } 
1

如果我這樣做使用MVVM,我將開始與ComboBox並對其進行修改,以適應。

如果您使用內置ComboBoxDevExpress,您幾乎可以免費獲得該產品。簡單地與項目填補了下拉列表中了,你想自動完成,然後設置選項:

  • 自動下拉(所以當你開始輸入時,它會自動下拉匹配列表) 。
  • 按比賽篩選名單(即下拉菜單中的唯一項目將與您輸入的內容相匹配)。
  • 匹配部分(即您鍵入的內容將過濾下拉列表,並在任何地方,甚至在中心進行匹配)。

如果你想更有趣,你可以編寫一個服務來監聽用戶當前輸入的內容,然後調整適合的下拉列表項目。下拉列表中與用戶類型相匹配的任何項目將自動顯示。我會用無擴展(RX)和Throttle要做到這一點,請參閱:

+0

爲了記錄,我與DevExpress沒有任何關係,這只是我熟悉的一個。 Telerik也是一個很好的圖書館,毫無疑問他們有類似的東西。 – Contango