我尝试通过动态搜索在文本框中开发结果列表。
现在我在以下时间更新记录:
SearchBox.TextChanged += new EventHandler(SearchBox_TextChanged);`
但是我必须等待我写的每个字符以获得列表的完整结果。
所以,如果我搜索例如“com”,结果不是包含“com”但只包含“c”的单词。
为了得到“com”的结果我需要写: “c” - >等待完成搜索 “o” - >等待完成搜索 “m” - >等待完成搜索
如何等待用户写字然后搜索?
感谢。
答案 0 :(得分:1)
最简单的方法是在事件处理程序中添加一个类似最小长度的条件
private void SearchBox_TextChanged(Event e,...){
if(e.text.Length > 3)
search(e.text);
}
答案 1 :(得分:1)
您不知道用户想要在文本框中插入什么内容,因此可能是Cat,Contact,Com,Computer,...因此您应该根据用户的每个关键字限制搜索列表,也可以设置策略例如,只需在输入长度至少为3时进行搜索。
编辑:另一种方式是使用Lazy模式,意味着保持文本的最后一次更改,然后在另一个线程(如计时器)中检查上次用户更改之间是否有超过2秒的时间到当前时间,更新你的搜索:(计时器间隔是2秒)。
private DateTime lastChange = DateTime.Now;
private bool textChanged = false;
object lockObject = new object();
private void textChanged(object sender, EventArg e)
{
lock(lockObject)
{
lastChange = DateTime.Now;
textChanged = true;
}
}
private void timer1_Tick(object sender, EventArgs е)
{
lock(lockObject)
{
if (textChanged && lastChange > DateTime.Now.AddSeconds(-2)) // wait 2 second for changes
{
UpdateList(); // or the method for searching.
textChanged = false;
lastChange = DateTime.Now;
}
}
}
答案 2 :(得分:1)
使用Timer
。在每个TextChanged
事件中,
在Timer
的{{1}}事件中,编写代码以更新搜索结果并停止计时器。
这将为您的用户提供一些时间来编写完整的搜索关键字。
通常Tick
可以在 1秒附近。
答案 3 :(得分:0)
您可以在应用程序启动时创建一个Timer,然后在每次击键时只需重置并重新启动计时器。
当用户停止输入时,计时器将执行并执行搜索。
答案 4 :(得分:0)
您可以使用具有2秒等间隔的计时器,并在计时器的Tick事件中实现搜索。在TextChanged事件中启用计时器,一旦搜索完成,则在Tick事件中禁用计时器。