Наше приложение 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, вызывающий раскрывающееся меню автозавершения, будет приемлемым. Я не возражаю против PInvoking, если придется.