Автозаполнение ComboBox для SubString

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

Клиенты в этом списке находятся в следующем формате: «CustomerID - CustomerName», например «004540 - NorthWind Traders»

Встроенное поле со списком WinForms имеет встроенную функцию автозаполнения и работает хорошо: проблема в что он работает только путем сопоставления с начала строки каждого элемента списка выпадающего списка, а не откуда угодно (подстрока).

Я бы хотел, чтобы мои пользователи могли делать либо тип CustomerID, либо CustomerName, поскольку старшие пользователи знакомы с большинством CustomerID, а новым сотрудникам было бы полезно ввести CustomerName и в любом случае получить автозаполнение. . Это означает, что я действительно хочу найти наилучшее совпадение из списка, в котором введенный текст является подстрокой элемента ComboBox.

Решение, которое часто предлагают для такого сценария, - создать скрытый список, который появляется только тогда, когда пользователь вводит текст, но меня это не устраивает, так как это похоже на быстрый взлом и его нелегко использовать повторно, и может выглядеть и вести себя непоследовательно по сравнению со стандартным элементом управления ComboBox.

Я пытался реализовать это сам, используя свойство DroppedDown, чтобы отобразить список, и использовать SelectedIndex для установки элемента, но содержимое текстового поля поля со списком сбрасывается, когда я это делаю, в то время как я хотел бы только «наилучшее соответствие элемент », который должен быть выделен из списков ComboBox (мне нужно« Предложить », а не« Добавить », в любом случае режим добавления нельзя использовать с сопоставлением подстрок).

Я думаю, что должен быть способ получше? Если кто-нибудь знает, что это делает пользовательский / сторонний элемент управления, я тоже не против его покупки.

Спасибо.

PS: Я программирую на C # для WinForms с .Net Framework 3.5.

14
задан Kharlos Dominguez 12 September 2010 в 01:03
поделиться