AutoCompletEstringCollection с текстовым событием -- c# поле с участием winforms поле с участием .net-4.0 пол Связанный проблема

AutoCompleteStringCollection with TextChanged Event


0
vote

проблема

русский

В настоящее время я использую текстовое поле для фильтрации некоторых записей. У меня есть дисплей обновления на текстовом сообщении текстового поля, поэтому пользователь не ударяет ввод или нажатие кнопки, чтобы начать фильтрацию. Я хочу использовать автозаполнениеCollection, чтобы запомнить записи, набранные в текстовое поле; Однако, если я сохраню каждую строку из текстового поля, когда событие TextChanged уволено, то он будет хранить все подстроки каждого термина фильтра.

Так, например, если я набрал строку «тест», он будет отображаться: <Код> "t" <Код> "te" <Код> "tes" <Код> "test" как рекомендуемые строки. Я просто хочу, чтобы последняя строка добавлена ​​к AutoCompleTEStringCollection.

Я думал о двух отдельных методах, которые я мог бы реализовать.

1) Я мог бы создать Task , который ждет "х" сумма времени после последнего текстового мероприятия, прежде чем он добавляет строку в автозаполнениеColdcollection. Если бы я сделал это, мне придется использовать отмену, чтобы отменить задачу каждый раз, когда произошло событие TextChanged. Это немного сложнее, потому что я использую .NET 4.0.

2) Я мог бы также <прочный> поиск через autoCompletestringcollection каждый раз, когда добавляется строка и удаляет все подстроки (которые начинаются в начале слова). Это может отступить к ответственности, если типы пользователей в более конкретный фильтр, но все же хотят хранить более короткий.

Есть ли лучший способ сделать это? Какой метод вы бы порекомендовали?

Английский оригинал

I'm currently using a text box to filter some entries. I have the display updating on the text box TextChanged event, so the user isn't hitting enter or pressing a button to begin filtering. I want to use an AutoCompleteStringCollection to remember entries typed into the text box; however, if I save every string from the text box when the TextChanged event is fired then it will store all the substrings of each filter term.

So for instance, if I typed the string "test" it would display: "t" "te" "tes" "test" as recommended strings. I just want the last string added to the AutoCompleteStringCollection.

I've thought about two separate methods I could implement.

1) I could create a Task that waits "x" amount of time after the last TextChanged event before it adds the string to the AutoCompleteStringCollection. If I did this I would have to use a cancellationToken to cancel the Task every time the textChanged event fired. This is slightly more complicated because I'm using .NET 4.0.

2) I could also search through the AutoCompleteStringCollection every time a string is added and remove all substrings (that start at the beginning of the word). This may backfire if the user types in a more specific filter, but still wants to store the shorter one.

Is there a better way to go about doing this? Which method would you recommend?

</div
        

Список ответов

1
 
vote
vote
Лучший ответ
 

Есть две вещи, которые нужно знать, когда пытаясь динамически заполнить автозаполнениеCollectionCollection. Во-первых, разрешение Microsoft к проблеме:

Не модифицируйте автозаполненный список кандидатов динамически во время ключевых событий. (msdn)

Сказав это, я смог выяснить способ динамически добавлять элементы в список.

Я закончил выбрать модифицированную версию реализации задачи. Вместо того, чтобы использовать отменуToken и Tokensource, я использовал Bool. Мой код завершился, глядя примерно так:

 <код> private void AddSearchToDropDown ()    {       Task.Factory.StartNew (() =>       {          if (CanAdd && filterTxtBox.Text.Length > 2)          {             CanAdd = false;             Thread.Sleep (4000);             this.Invoke(new Action(() =>             {                filterTxtBox.AutoCompleteMode = AutoCompleteMode.None;                m_suggestedTests.Add (filterTxtBox.Text);                filterTxtBox.AutoCompleteMode = AutoCompleteMode.Suggest;                CanAdd = true;              }));          }       });    }   

Вы также захотите код в обработке событий TextChanged, который начнет лол на ложь, когда они начинают печатать в текстовом поле. Таким образом, вы не добавляете первую запись через 4 секунды после первого изменения текста.

Во-вторых, что нужно знать, в том, что было нарушение исключение, если я использовал AutoCompletemode.suggestappend или добавления.

Пока это не полный ответ, я надеюсь, что это поможет кому-либо, что удается найти этот вопрос.

 

There are two things to be aware of when trying to dynamically fill the AutoCompleteStringCollection. First is Microsoft's Resolution to the issue:

Do not modify the AutoComplete candidate list dynamically during key events. (MSDN)

Having said that, I was able to figure out a way to dynamically add elements to the list.

I ended up opting for a modified version of the Task implementation. Instead of using a CancellationToken and TokenSource I used a bool. My code ended up looking roughly like this:

private void AddSearchToDropDown ()    {       Task.Factory.StartNew (() =>       {          if (CanAdd && filterTxtBox.Text.Length > 2)          {             CanAdd = false;             Thread.Sleep (4000);             this.Invoke(new Action(() =>             {                filterTxtBox.AutoCompleteMode = AutoCompleteMode.None;                m_suggestedTests.Add (filterTxtBox.Text);                filterTxtBox.AutoCompleteMode = AutoCompleteMode.Suggest;                CanAdd = true;              }));          }       });    } 

You'll also want code in your textChanged event handler that will set the bool to false whenever they begin typing in the textbox. That way you don't add the first entry 4 seconds after the first text changed event.

Second thing to be aware of is that there was a Violation Exception if I used AutoCompleteMode.SuggestAppend or Append.

While this isn't a complete answer I hope that it helps anyone that manages to find this question.

</div
 
 

Связанный проблема

1  Очистка C # код  ( Cleaning up c sharp code ) 
Есть ли какой-нибудь инструмент, который очищает C # .NET кода всех комментариев, отладки, документацию при развертывании его на сервер? Я хочу использовать...

-6  Linux и CSHARP, проверьте, если файл / папка не существует в Linux, если так, запустите mkdir через csharp ssh - [закрыто]  ( Linux and csharp check if file folder doesnt exist in linux if so run mkdir ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт . Этот вопрос нуждается в Детали или ясность . В настоящее...

3  OnleftClick & OnrightClick JavaScript Функции  ( Onleftclick onrightclick javascript functions ) 
В моем боковом коде сервера я динамически строим таблицу и именно сейчас я добавляю следующий код, чтобы обрабатывать Щелчок строки. <код> tr.Attributes.Add...

0  Каркас экспорта данных или инструменты  ( Data export framework or tools ) 
Есть ли какие-либо данные экспорта данных в .NET или что-то. Мне нужно устройство набора инструментов для экспорта наследие и данных из более старых / устарев...

14  Datagridviewcomboboxcolumn Добавление различных элементов к каждой строке  ( Datagridviewcomboboxcolumn adding different items to each row ) 
Я создаю таблицу, используя datagridview, где пользователь может выбрать элементы из раскрывающегося списка в каждой ячейке. Чтобы упростить проблему, давайте...

31  C # DateTime: какую «дату» использовать, когда я использую только «время»?  ( C sharp datetime what date to use when im using just the time ) 
Я использую <код> DateTime в c #, чтобы отобразить время. На какую порту даты каждый использует при построении времени? e.g. Ниже недействительно, потому ч...

-2  Группировка результатов от XPathSelectelements в C #  ( Grouping results from xpathselectelements in c sharp ) 
У меня есть XML в следующей структуре <код> <root> <Node> <value>a</value> <value>b</value> <value>c</value> </Node> ...

2  Исключить одно поле из NHB грязной оптимистической блокировки  ( Exclude one field from nhb dirty optimistic locking ) 
Мы устанавливаем наши обновления сущностей с грязным оптимистичным блокировкой в ​​конфигурации NHB: <код> .Override<OurEntity>(x => { x.DynamicUpdate()...

3  Как я могу использовать список?  ( How can i use listdictionary ) 
Я могу заполнить мой список listdicticatic, но, если запущена ошибка, возвращается мне в "Foreach (kne ky ky в ld.keys)" (исключение недействительной операции...

14  Структура космического эффекта в памяти для отсортированного текста поддерживает префикс поиска  ( Space efficient in memory structure for sorted text supporting prefix searches ) 
У меня есть проблема: мне нужен космический поиск файловой системы, основанных на префиксе файлового пути. Преобразование поиска отсортированного текста, друг...

9  Ответ ASP.NET.redirect с jQuery Mobile - URL-хешированием  ( Asp net response redirect with jquery mobile url hashing ) 
У меня есть стандартные формы Auth Asp.net приложение. Моя регистрация и страница входа в систему находятся в одном файле .aspx с 2 мобильными страницами jQue...

29  Как выбрать все элементы в списке на флажке CheckBox?  ( How do i select all items in a listbox on checkbox checked ) 
Мне нужно выбрать все элементы в списке, когда нажат флажок. Можно ли выбрать все элементы в списке, используя одну строку кода? Или я должен будет питаться ч...

0  .NET Условно используют библиотеку .NET, если установлено  ( Net conditionally use a net library if installed ) 
Мой вопрос довольно просто. Я хочу добавить новый раздел в мой проект, который будет использоваться библиотеки SMO ​​.NET (объект управления SQL Server). Я сч...

1  C # Словарь <Объект, t> Значение поиска  ( C sharp dictionaryobject t lookup value ) 
Не уверены, как лучшее фразу, наверное, это, вероятно, почему у меня трудно посмотреть это. Вот приложение для пробной консоли для демонстрации моего значения...

0  Что это за кодирование? (Найдено в Outlook / filitory)  ( What is this encoding found in outlook filesite ) 
Я работаю над Addin Outlook VSTO, который будет подключать аддин для файлового файла imagiate, я в настоящее время пытаюсь получить доступ к идентификатору в ...

Связанный проблема

1  Очистка C # код 
-6  Linux и CSHARP, проверьте, если файл / папка не существует в Linux, если так, запустите mkdir через csharp ssh - [закрыто] 
3  OnleftClick & OnrightClick JavaScript Функции 
0  Каркас экспорта данных или инструменты 
14  Datagridviewcomboboxcolumn Добавление различных элементов к каждой строке 
31  C # DateTime: какую «дату» использовать, когда я использую только «время»? 
-2  Группировка результатов от XPathSelectelements в C # 
2  Исключить одно поле из NHB грязной оптимистической блокировки 
3  Как я могу использовать список? 
14  Структура космического эффекта в памяти для отсортированного текста поддерживает префикс поиска 
9  Ответ ASP.NET.redirect с jQuery Mobile - URL-хешированием 
29  Как выбрать все элементы в списке на флажке CheckBox? 
0  .NET Условно используют библиотеку .NET, если установлено 
1  C # Словарь <Объект, t> Значение поиска 
0  Что это за кодирование? (Найдено в Outlook / filitory) 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.