C#用ComboBox实现模糊搜索 解决各种细节问题

本文详细介绍了如何在C#中使用ComboBox实现模糊搜索功能,包括处理输入框从左开始搜索、避免自动添加第一个匹配项到编辑框、整体效果展示、代码实现以及在搜索过程中可能遇到的异常处理。通过示例代码,展示了如何查询数据库并实时更新ComboBox的选项,同时对异常情况进行捕获和处理。

输入框每次输入都从左开始

输入框字符减到没有字符后点击comBoBox外的地方会出现ArgumentOutOfRangeException异常

搜索时有匹配项会将第一个项自动添加到编辑框内

整体效果:


实现代码:

 private void comboBoxSearch_TextUpdate(object sender, EventArgs e)   //不要用TextChanged
        {
            string s = comboBoxSearch.Text;              //获取输入内容

            //查询数据库表中所有已录入人员
            SQLiteCommand command = new SQLiteCommand(connection);           
            command.CommandText = "select * from vip";
            SQLiteDataReader reader = command.ExecuteReader();
            List<string> sList = new List<string>();    //存放数据库查询结果
            while (reader.Read())
            {
                sList.Add(reader["name"].ToString());
            }
           //禁止删除键,在SelectionChangeCommitted中使能(只有在选择已有的项后才会使能删除键)
            buttonDelete.BackColor = Color.FromArgb(180, 0, 0); 
            buttonDelete.Enabled = false;
            //提前下拉,以显示搜索结果(必须要在添加项之前下拉,否则会将第一项自动添加到编辑框内 覆盖掉输入的内容)
            comboBoxSearch.DroppedDown = true;      //显示下拉列表,但是显示后鼠标指针就不见了
            Cursor.Current = Cursors.Default;                  //将指针显示出来

           //在表中已录入名字中寻找包含输入内容的项  有则添加到comboBox项中  

            try
            {
                foreach (string str in sList)
                {
                    if (s.Length > 0)
                    {
                        if (str.Contains(s))
                        {
                            if (comboBoxSearch.Items.IndexOf(str) < 0) //如果当前下拉表中没有该字符串的话则添加,否则不添加
                                comboBoxSearch.Items.Add(str);
                        }
                        else
                        {
                            if (comboBoxSearch.Items.IndexOf(str) >= 0)
                                comboBoxSearch.Items.Remove(str);
                        }
                    }
                    else
                    {
                        comboBoxSearch.DroppedDown = false;
                        comboBoxSearch.Items.Clear();
                    }
                }
            }
            catch (ArgumentOutOfRangeException ex)     //清空输入框时经常会出现异常,暂时不知道怎么解决,捕获后可以正常,不处理也行
            {
                //textBoxInfo.AppendText("Exception: " + ex.ToString());
            }
        }



评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值