Наше WinForms приложение выполняет отложенную загрузку данных для автоматического заполнения текстового поля. Псевдокод для этого выглядит следующим образом:
- Пользовательские типы в TextBox
- При вводе паузы определите, нужно ли нам извлекать данные автозаполнения
- В рабочем потоке связаться с сервером и получить данные
- Вызов обратно в поток пользовательского интерфейса
- Набор
textBox.AutoCompleteCustomSource = fetchedAutoCompleteStringCollection;
- Заставить текстовое поле отображаться в раскрывающемся списке автозаполнения.
У меня сейчас проблема с # 6. Как хак, я делаю следующее, чтобы имитировать нажатие клавиш, которое работает, но оно работает не во всех ситуациях.
// This is a hack, but the only way that I have found to get the autocomplete
// to drop down once the data is returned.
textBox.SelectionStart = textBox.Text.Length;
textBox.SelectionLength = 0;
SendKeys.Send( " {BACKSPACE}" );
Должен быть лучший способ. Я не могу поверить, что я единственный человек, который выполняет автоматическое заполнение данных асинхронно. Как мне это сделать?
РЕДАКТИРОВАТЬ: Вызов Win32, чтобы вызвать раскрытие Auto Complete будет приемлемым. Я не против PInvoking, если я должен.