我想在C#winform应用程序中有一个文本字段,我想要的效果是,当用户在文本字段中键入内容时,程序在后台搜索数据库,然后生成下拉列表用户可以选择..
以下是两个基于Web的示例,但请注意我的应用程序是基于winforms而不是基于Web的。我只是想要相同的效果,这就是为什么我要展示这些:
cinemasquid.com:
blu-ray.com:
如何在C#winform应用程序中为文本字段获得相同的效果?
答案 0 :(得分:3)
首先,您需要在表单上绑定TextChanged
事件。然后,当用户按任意键时,您将获得该事件。现在,在事件处理程序内部检索用户输入的字符串,使用此字符串执行搜索(不要在UI线程上进行搜索,否则您的UI将挂起,您可以在BackgroudWorker
中进行搜索({{ 3}}))。获得结果后,将此结果绑定到ListBox
。
我开发了一个具有自动完成功能的应用程序。在此if用户输入任何电影名称时,匹配结果将用于显示在列表框中。
希望这适合你。
答案 1 :(得分:1)
如果您不想对解决方案进行编码,可以通过Google搜索获得一些自定义控件,例如:http://www.dotnetfunda.com/articles/article225.aspx
但是你应该记住响应时间:如果你每次用户在文本框中输入一个字母时编码数据库搜索,你的应用程序就会变得迟钝和/或反应迟钝,这取决于桌子上的记录数量,你的速度。网络连接和许多其他因素。
考虑在内存中预加载字符串集合(名称,标题,无论您希望在文本框中显示的内容),然后对内存中的集合执行LINQ查询以填充控件的自动完成部分。
答案 2 :(得分:0)
正如Amar Palsapure所说,您需要使用{Droptonown的TextChanged
事件。此外,欢迎背景工作者。
这是一个简短的例子:
首先,我们需要一些数据源。在这种情况下,这将是一个简单的字符串列表:
List<string> DataSource = new List<string>
{
" How do I use jQuery to select all children except a select element",
"How can I get the text of the selected item from a dropdown using jQuery?",
"Dropdown menu in IE6 inserting too much width, not dropping-down",
"How to display images within a drop down box instead of text",
"InfoPath 2007 - Populate drop-down list on-the-fly",
"Is there any difference between drop down box and combo box?",
"Drop Down list null value not working for selected text c#?",
"Make drop-downs automatically drop in a loop cycle",
"PHP How can I keep the selected option from a drop down to stay selected on submit?",
"Jquery Issue - Drop down list does NOT show from iPhone/Mobile Devices"
};
接下来,BackgroundWorker DoWork事件 - 这是在我们的数据源中搜索有效位置的部分响应:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
String text = e.Argument as String;
List<String> results = new List<string>();
//Code for seraching text - may be diffrent if you have another DataSource
foreach (String dataString in DataSource)
{
if (dataString.IndexOf(text, 0, StringComparison.CurrentCultureIgnoreCase) != -1)
{
results.Add(dataString);
}
}
e.Result = results;
}
你可以看到,结果是e.Result
返回的,所以我们也需要实现RunWorkerCompleted
事件:
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
comboBox1.Items.AddRange((e.Result as List<String>).ToArray());
comboBox1.DroppedDown = true;
}
此代码将填充我们的dropDown女巫返回值,并将其显示给用户。
当然,为了实现此功能,您需要在RunWorkerAsync
中致电TextChanged
:
private void comboBox1_TextChanged(object sender, EventArgs e)
{
// Save position of cursor, because it like to dissapering.
int cursor = comboBox1.SelectionStart;
//Clearing items in dropDown
comboBox1.Items.Clear();
//Is something was searched before, cancel it!
while (backgroundWorker1.IsBusy)
{
if (!backgroundWorker1.CancellationPending)
{
backgroundWorker1.CancelAsync();
}
}
// And search new one
backgroundWorker1.RunWorkerAsync(comboBox1.Text);
// And bring back cursor to live
comboBox1.SelectionStart = cursor;
}
我希望能帮到你