动态搜索结果C#

时间:2010-12-28 13:03:36

标签: c# search text

我尝试通过动态搜索在文本框中开发结果列表。

现在我在以下时间更新记录:

        SearchBox.TextChanged += new EventHandler(SearchBox_TextChanged);`

但是我必须等待我写的每个字符以获得列表的完整结果。

所以,如果我搜索例如“com”,结果不是包含“com”但只包含“c”的单词。

为了得到“com”的结果我需要写: “c” - >等待完成搜索 “o” - >等待完成搜索 “m” - >等待完成搜索

如何等待用户写字然后搜索?

感谢。

5 个答案:

答案 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事件中禁用计时器。