C# Textbox 输入提示功能
在VS2008中,使用Winform中的TextBox实现类似google 和百度的输入提示功能,如图:
发现在textBox1_TextChanged事件里写相关代码:
private void textBox1_TextChanged(object sender, EventArgs e)
{
string[] str = { "seer", "stt", "git", "lii", "gll", "lrt" };
this.textBox1.AutoCompleteCustomSource.AddRange(str);
this.textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
this.textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
}
出现错误:
暂时还没找出原因
在网上查到的都是把提示的数据源写在Form1_Load事件里,这样可以防止输入时频繁刷新窗体,提高速度,
只是在窗体初始化加载时一次完成数据源的加载。
另外,我想实现的不仅是以开头字母或者文字相同的才提示,而是包含输入的文字的所有提示,如输入“菜”,
出现“菜单”,“菜谱”,“蔬菜”,“白菜”......
后来找到了一种方法:TextBox+ListBox
匹配的提示项以数据库模糊查询为例:
在TextBox的textBox1_TextChanged事件里添加代码:
private void textBox1_TextChanged(object sender, EventArgs e)
{
DataBase db = new DataBase();//自己写的类
DataSet ds = new DataSet();
string sql = "select * from RegDept where DEPT_NAME like " + "'%" + this.textBox1.Text + "%'";
db.Query(ref ds, sql);
db.CloseDB();
if (ds.Tables.Count > 0)
{
if (ds.Tables[0].Rows.Count > 0)
{
this.listBox1.Visible = true;
this.listBox1.Items.Clear();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
this.listBox1.Items.Add(ds.Tables[0].Rows[i][1].ToString());
}
}
}
}
在listBox1_SelectedValueChanged事件里添加:
private void listBox1_SelectedValueChanged(object sender, EventArgs e)
{
if (this.listBox1.SelectedItems.Count > 0)
{
this.textBox1.Text = this.listBox1.SelectedItem.ToString();
}
}
运行效果如下: