winform 自帶的 combobox 無法支持根據輸入文本匹配列表中的項目,需要使用自定義控件。
public class MyCombobox : ComboBox { //初始化數據項 private List<string> originalList = new List<string>(); public MyCombobox() { this.TextUpdate += new EventHandler(CmbTextUpdate); } /// <summary> /// 初始化控件的數據 /// </summary> /// <param name="list">數據集合</param> public void Init(List<string> list) { this.originalList = new List<string>(); foreach (string str in list) { this.originalList.Add(str); } this.Items.Clear(); this.Items.AddRange(this.originalList.ToArray()); } private void CmbTextUpdate(object sender, EventArgs e) { this.Items.Clear(); List<string> list = new List<string>(); list.Add(""); foreach (var item in originalList) { if (item.Contains(this.Text)) { list.Add(item); } } this.Items.AddRange(list.ToArray()); //設置光標位置,否則光標位置始終保持在第一列,造成輸入關鍵詞的倒序排列 this.SelectionStart = this.Text.Length; //保持鼠標指針原來狀態,有時候鼠標指針會被下拉框覆蓋,所以要進行一次設置。 Cursor = Cursors.Default; this.DroppedDown = true; } }