Я хочу создать TextBox, в котором отображается выпадающее меню автозаполнения с некоторыми предложениями.
Конечно, я думал об использовании AutoCompleteCustomSource для моего текстового поля, но проблема в том, что текстовое поле автоматически фильтрует все, что не содержит введенный текст.
Например, если я наберу «listen», мой алгоритм будет использовать «listen (now)», «listen (позже)» и «listen to AAA» в качестве подсказок. Когда я помещаю их в autocompletecustomsource все работает нормально. Но как только я напишу «сейчас», чтобы текст стал «слушать сейчас», выпадающий список автозаполнения становится пустым, потому что ни один из элементов в autocompletecustomsourceource не начинается с «слушать сейчас».
Затем я попытался изменить ввод с текстового поля на комбинированный список, где я поместил свои предложения в свойство Items, а затем просто программно открыл раскрывающийся список. Проблема здесь в том, что первый элемент автоматически выбирается при открытии раскрывающегося списка из кода, а текст первого элемента заменяет введенный текст.
Представьте себе первый пример: когда вы набираете «прослушать», открывается раскрывающийся список с пунктами «прослушать (сейчас)», «прослушать (позже)» и «прослушать AAA». Но текст в выпадающем списке автоматически меняется на первый элемент, поэтому становится «слушай (сейчас)», и ты не можешь набрать что-либо еще.
это код, который я сейчас использую:
private void comboBox2_KeyUp(object sender, KeyEventArgs e)
{
string asd = comboBox2.Text;
if (asd.Length < 3)
return;
if (e.KeyCode == Keys.Enter)
{
OpenItem(asd);
return;
}
if (AllToString(comboBox2.Items).Contains(asd))
{
return;
}
DateTime started = DateTime.Now;
System.Threading.Thread tth = new System.Threading.Thread((System.Threading.ThreadStart)delegate()
{
JsonData dat = new JsonData();
//Query autocomplete
...
//End Query
comboBox2.Invoke((MethodInvoker)delegate()
{
if (comboBox2.Tag == null || ((DateTime)comboBox2.Tag) < started)
{
comboBox2.Items.Clear();
comboBox2.Items.AddRange(li.ToArray()); //li is the list of suggestions
comboBox2.Select(comboBox2.Text.Length, 0);
comboBox2.Tag = started;
if (li.Count != 0)
comboBox2.DroppedDown = true;
else
{
comboBox2.Focus();
comboBox2.Select(comboBox2.Text.Length, 0);
}
}
});
});
tth.IsBackground = false; tth.Start();
}
Итак, мой вопрос: как я могу создать текст или комбинированный список, где я могу поместить свои предложения в раскрывающемся списке, без изменения введенного текста и без фильтрации. Я хочу, чтобы все предложения отображались постоянно.
Спасибо за помощь, Алекс