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

来源:互联网 发布:网站通用域名有用吗 编辑:程序博客网 时间:2024/05/20 04:31

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

输入框字符减到没有字符后点击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());
            }
        }



0 0
原创粉丝点击