WinForm ComboBox下拉框带搜索功能

2022-01-06 更新

效果图如下

方法1

2021-12-20 更新,修复输入不存在的数据源然后点击其他地方会报错

核心代码

//数据源
List<string> data = new List<string>()
{
    "A001",
    "A002",
    "A003",
    "B001",
    "B012",
    "B031",
    "C011",
    "C0121",
    "C01231",
    "C0101",
};

/// <summary>
/// comboBox1文件内容发现改变时 触发事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void comboBox1_TextUpdate(object sender, EventArgs e)
{
    //清空combobox
    ComboBox cb = sender as ComboBox;
    cb.Items.Clear();

    //临时存放备查数据
    List<string> temp = new List<string>();

    foreach (var item in data)
    {
        if (item.Contains(cb.Text))
        {
            temp.Add(item);
        }
    }

    if (temp.Count < 1)
    {//修复输入不存在的数据源然后点击其他地方会报错
        cb.Items.Add("");
        cb.Text = "";
        return;
    }

    try
    {
        //combobox添加已经查到的关键词
        cb.Items.AddRange(temp.ToArray());
        //设置光标位置,否则光标位置始终保持在第一列,造成输入关键词的倒序排列
        cb.SelectionStart = cb.Text.Length;
        //保持鼠标指针原来状态,有时候鼠标指针会被下拉框覆盖,所以要进行一次设置。
        Cursor = Cursors.Default;
        //自动弹出下拉框
        cb.DroppedDown = true;
    }
    catch
    {
        cb.SelectedIndex = -1;
    }
}

方法2

今天发现 Combobox有自带查询功能自动提示功能,不过有些功能没实现,如我们在combobox里面搜A001,只能输入A开始才会提示A001,如果输入0开始没不会有A001这个提示,以下是核心代码
this.comboBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.comboBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
//转载请保留http://www.luofenming.com/show.aspx?id=ART2021121700001

评论

  1. 219.131.2.*2021-12-25 23:50:56
    你这样selected之后其他的itmes会被清掉吧!

  2. 120.239.196.*2021-12-20 22:36:35
    修复了楼下网友的报错问题 
    修复了输入不存在的数据源然后点击其他地方会报错问题(输入123456点击别处会报错)

  3. 219.141.246.*2021-12-20 19:14:19
    试了一下输入123456点击别处会报错

  4. 219.141.246.*2021-12-20 19:13:46
    6