2014-04-25 50 views
0

我有一個情況下,用戶被賦予一個可能有很多選擇的組合框。與此配對的是一個用於過濾項目的文本框。我想要做的是在TextBox具有焦點時打開下拉列表 - 讓用戶看到當前過濾器在鍵入時完成的內容。 (這不僅僅是自動完成的,我目前正在匹配項目中任何地方的過濾文本,我可能會用RegEx搜索替代它。)組合框打開時,另一個控件有焦點

聽起來很簡單 - 將文本框獲得焦點,當它失去焦點時關閉它。它打開 - 並及時關閉備份。任何好的答案?

我的Google-Fu今晚一定很虛弱,我不敢相信沒有人想要這樣做,但我沒有發現任何東西。 (我看到一個相關的東西,在打開的ComboBox中提供像Google這樣的建議選項,但我的列表是必需的,而不僅僅是建議。)

回答

1

您可以添加ComboBox設置的TextBox代碼的Focus事件物業

ComboBox.DroppedDown = true; 

不是在文本框代碼

ComboBox.SuspentLayout(); 
//ComboBox.Items add/remove 
ComboBox.ResumeLayout(); 

的TextChanged事件添加不要忘記重置的項目時文本是空的。

編輯:

這似乎是工作(但你不會看到鼠標)

string[] items = { "abcd", "abc", "bcd", "cd" }; 

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    comboBox1.SuspendLayout(); 
    comboBox1.Items.Clear(); 
    comboBox1.Items.AddRange(items.Where(item => item.ToLower().Contains(textBox1.Text.ToLower())).ToArray()); 
    comboBox1.ResumeLayout(); 
    comboBox1.DroppedDown = true; 
} 
+0

這正是我嘗試 - 雖然第二個代碼塊沒有按」即使沒有TextChanged事件被觸發,該框也會關閉。 –

+0

修復了它。即使文本沒有被改變,顯然對TextBox進行了更新。 –