Kishore yasoju Ответов: 1

Как получить самовнушение в текстовом поле с использованием последних цифр значения в приложениях windows


Я работаю над приложениями для windows. У меня есть текстовое поле с самовнушением. я добавил несколько значений в autosuggestioncollection. если я набираю первую букву значения,то это указывает на добавленные значения, но если я набираю последние несколько букв значения. Мне нужно, чтобы он показывал предложения, даже если я ввожу последние несколько букв значения.

Что я уже пробовал:

AutoCompleteStringCollection mycollection = new    AutoCompleteStringCollection();
mycollection.Add("TEST12345");
mycollection.Add("TEST13456");
mycollection.Add("TEST22222");
mycollection.Add("TEST99999");
textBox1.AutoCompleteCustomSource = mycollection;

1 Ответов

Рейтинг:
1

Maciej Los

Что ж... Это нормальное поведение контроля с помощью AutoCompleteCustomSource[^], потому что это автоматически завершает ввод строк с помощью сравнение вводимого префикса с префиксами всех строк в поддерживаемом источнике.

Если вы хотите изменить его, вы должны создать textBox1_Click событие и там вы можете реализовать метод, который сравнивает введенную строку со строкой пользовательского источника. Например:

TextBox txt = (TextBox)sender;
if(txt.Text.Length<2) return;
string s = txt.Text;
s = txt.AutoCompleteCustomSource.OfType<string>.FirstOrDefault(x=> x.Contains(s));
if(s != string.Empty) txt.Text = s;


Он работает так, как и ожидалось, когда ниже свойств TextBox устанавливаются как показано на рисунке:
AutoCompleteMode = SuggestAppend;
AutoCompleteSource = CustomSource;


Kishore yasoju

Я получил сообщение об ошибке, как: система.В LINQ.Перечислимый.OfType<tresult>(System.Коллекции.Интерфейс IEnumerable)' является 'способ', который не является допустимым в данном контексте

Maciej Los

Очень странный... Он работает для меня (фреймворк в проекте установлен на 4.5).
Попробуйте заменить это:

s = txt.AutoCompleteCustomSource.OfType<string>.FirstOrDefault(x=> x.Contains(s));

с:
s = txt.AutoCompleteCustomSource.Cast<string>.FirstOrDefault(x=> x.Contains(s));

Давайте посмотрим, если это поможет.
Какую версию фреймворка вы используете в своем проекте?

Kishore yasoju

Я попробовал сделать это Мацей, но получил ту же ошибку
Системы".Данных.EnumerableRowCollectionExtensions.Cast<tresult>(System.Data.EnumerableRowCollection)' - это "метод", который недопустим в данном контексте". Кстати, я использую Visual Studio 2008 и работаю над приложением windows CE.

Maciej Los

Против 2008 поддерживает .Framework версии 3.5. То, что это твое?
Оба метода доступны в VS 2008 для WinCE. Видеть:
Перечислимый.Метод OfType(TResult) (System.Linq)[^]
Перечислимый.Метод Cast(TResult) (System.Linq)[^]

Kishore yasoju

А моя-да.NET framweork 3.5