输入框每次输入都从左开始
输入框字符减到没有字符后点击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());
}
}

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





