Результат динамического поиска C # - PullRequest
2 голосов
/ 28 декабря 2010

Я пытаюсь составить список результатов путем динамического поиска в текстовом поле.

Теперь я обновляю запись, когда:

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

Но мне приходится ждать каждыйсимвол, который я пишу для полного результата списка.

, поэтому, если я ищу, например, «com», результат будет не словами, содержащими «com», а только «c».у меня есть результат "com" мне нужно написать: "c" -> дождаться завершения поиска "o" -> дождаться завершения поиска "m" -> дождаться завершения поиска

Как я могу сделать дляподождать, пока пользователь напишет слово, а затем выполнить поиск?

Спасибо.

Ответы [ 5 ]

1 голос
/ 28 декабря 2010

Используйте Timer.При каждом событии TextChanged

  • запускайте этот таймер, если он не работает,
  • перезапускайте (останавливайте и запускайте), если он уже работает,

Вкл.1011 * '* Tick событие, введите свой код для обновления результатов поиска и остановите таймер.

Это даст вашим пользователям некоторое время для написания полных ключевых слов поиска.

Обычно Timer Interval может быть около 1 секунда .

1 голос
/ 28 декабря 2010

Вы не знаете, что пользователь хочет вставить в текстовое поле, поэтому это может быть 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;
       }
    }
}
1 голос
/ 28 декабря 2010

самый простой способ - добавить в обработчик событий условие, например, минимальной длины

 private void SearchBox_TextChanged(Event e,...){
   if(e.text.Length > 3)
      search(e.text);
  }
0 голосов
/ 28 декабря 2010

Вы можете использовать таймер с интервалом около 2 секунд и осуществлять поиск по событию Tick. Включите таймер в событии TextChanged, и после завершения поиска отключите таймер в событии Tick.

0 голосов
/ 28 декабря 2010

Вы можете создать таймер при запуске приложения, а затем при каждом нажатии клавиши просто сбрасывать и перезапускать таймер.

Когда пользователь перестает печатать, таймер запустится и выполнит поиск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...