В одном из моих приложений WinForms у меня есть окно с ComboBox для того, чтобы пользователь мог выбрать клиента.
Клиенты в этом списке находятся в таком формате: "CustomerID - CustomerName", например "004540 - NorthWind Traders"
У родного WinBorms combobox есть встроенная функция автозаполнения, и она работает хорошо: проблема в том, что она работает только путем сопоставления с началом строки каждого элемента списка combobox, а не из любой точки (подстрока).
То, что я хотел бы, чтобы мои пользователи могли делать это, - это любой тип CustomerID или CustomerName, поскольку старшие пользователи знакомы с большинством идентификаторов клиентов, в то время как новым рекрутам будет полезно иметь возможность вводить имя CustomerName и получать автозаполнение в любом случае, Это означает, что я действительно хочу найти наилучшее соответствие из списка, где введенный текст является подстрокой элемента ComboBox.
Решение, часто предлагаемое для такого рода сценариев, заключается в создании скрытого списка, которое появляется только тогда, когда пользователь вводит его, но я не доволен тем, что он похож на быстрый хак и не может быть легко повторно использован и могут выглядеть и вести себя непоследовательно по сравнению со стандартным контроллером ComboBox.
Я попытался реализовать это самостоятельно, используя свойство DroppedDown, чтобы создать список и использовать SelectedIndex для установки элемента, но содержимое текстового поля combobox reset, когда я это делаю, в то время как мне только хотелось бы, чтобы "наилучший совпадающий элемент", который будет выделен из списков ComboBox (мне нужно "Предложить", а не "Добавить", Append-режим не может быть действительно использован с подстрокой в любом случае).
Я думаю, что должен быть лучший способ? Если кто-то знает о пользовательском/стороннем контроле, делающем это, я не против покупать его.
Спасибо.
PS: Я программирую на С# для WinForms, с .Net Framework 3.5.