Я хочу, чтобы бесплатный тип в combobox. Когда я перестаю печатать, у меня есть задание с задержкой, которое заполняет элементы со списком с некоторыми зависимыми от ввода результатами. Проблема в том, что мой ввод переопределяется первым элементом в списке. Есть ли способ сохранить свой вклад?Combobox = текстовое поле + список
Мой пример кода происходит так:
public void PopulateCombo(JObject result)
{
Debug.WriteLine("Thread id: " + Thread.CurrentThread.ManagedThreadId);
cbSearch.Items.Clear();
if (result.Value<bool>("success") == true)
{
JArray arr = result.Value<JArray>("data");
for (int i = 0; i < arr.Count; i++)
{
JToken item = arr[i];
cbSearch.Items.Add(new ComboBoxItem(item.Value<string>("name"), item.Value<string>("_id")));
}
cbSearch.DroppedDown = true;
}
}
отредактированные на 23,06
Я привожу пример того, что я на самом деле пытается сделать.
- выпадающий не пуста (нет товаров)
- Пользователь начинает вводить, например, "JA". Combobox отправляет запрос на мой сервер. Не должно быть проблем, так как вызов асинхронный с 1 секундой задержки после последнего ввода пользователя.
- Мои бэкэнд возвращает некоторые результаты (Антон Джеймисон, Джеймс Аарон, Джеймс Хетфилд и т. Д., Ограниченный до 50)
- Я хочу заполнить выпадающий список результатами, чтобы открыть его, но в виде текста со списком я хочу держите «ja», чтобы пользователь мог уточнить свой поиск дальше.
- Пользователь расширяет поиск "ja h". Бэкэнд отвечает Джеймсом Хетфилдом. Результат теперь всего лишь один элемент, и теперь я могу установить текст со списком или сохранить поведение сверху. Не уверен, что еще лучше.
Все это реализовано, но на этапе 4, когда я заполняю поле со списком, используя приведенную выше функцию, текст комбо изменяется с «ja» на первое совпадение списка. (Антон Джеймисон в примере). Я почти уверен, что был простой вариант для реализации этого поведения, но я не уверен, было ли это на C#.
На комментарии:
- Это была хорошая попытка, но неудачно. Когда я заполняю элементы combobox, моя строка поиска изменяется на первое совпадение списка.
- Я думаю, что я не пытаюсь реализовать функцию автозаполнения.
- Хорошо поймите о DroppedDown. Я перемещаю его в отредактированной версии.
Не можете ли вы захватить «combobox.text» перед тем, как заполнить список, а затем восстановить его после популяции? – Charleh
Вы пытаетесь реализовать автозаполнение? Если это так, он уже построен в: http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.autocompletemode.aspx – Tergiver
Невозможно воспроизвести проблему. Возможно, вы захотите переместить строку 'DroppedDown = true;' после цикла for .... – LarsTech