Автозаполнение [содержит вместо начала с] в winform TextBox

// [in designer] textBoxInContext.AutoCompleteMode = Suggest
// [in designer] textBoxInContext.AutoCompleteSource = CustomSource
AutoCompleteStringCollection autoComplete = new AutoCompleteStringCollection();
autoComplete.AddRange(myArrayofStrings);
textBoxInContext.AutoCompleteCustomSource = autoComplete;

У меня есть этот код, который хорошо работает, как описано в MSDN.

Проблема: если пользователь вводит "PS" , он показывает всю строку, начинающуюся с "PS" ; Я хотел бы отобразить все строки, содержащие "PS"

Любые указатели?

Ответ 1

Если вы не нашли другого способа, я предлагаю сделать это вручную:

  • Используйте поле со списком без элементов (вы заполните их вручную позже).
  • Введите строковый массив с вашими возможными предложениями.
  • В событии combobox.TextChanged или KeyUp возьмите его текст и сравните его с вашим строковым массивом в зависимости от того, какой вы хотите, и после очистки combobox.Items добавьте найденные результаты в combobox.Items и убедитесь, что установлены свойство DroppedDown - true, если вы нашли предложения.

Ответ 2

Глупое, но интересное предложение: создайте класс, наследующий от AutoCompleteStringCollection, и поиграйте с ним в отладке, чтобы узнать, можете ли вы это сделать.

Обычное предложение: сделайте свой собственный автозаполненный со списком.

Ответ 3

Я столкнулся с той же проблемой, и WPF Autocomplete Textbox Control - это то, что я нашел в CodeProject, это работает очень хорошо. Он написан в WPF, но вы можете изменить его в соответствии с вашими потребностями.