Как сделать список автозаполнения для TextBox редактируемым?

У меня есть приложение с большим количеством элементов управления TextBox, которые используют автозаполнение. Каждый из них использует AutoCompleteMode.CustomSource для получения текста автозаполнения из связанного AutoCompleteStringCollection.

Всякий раз, когда пользователь вводит новое значение в TextBox, оно добавляется к соответствующему AutoCompleteStringCollection, а в конце сеанса все эти коллекции сохраняются в файле в домашнем каталоге пользователя.

Проблема в том, что исправить ошибки в этих коллекциях невозможно. В IE элементы управления вводом с элементами управления автозаполнением позволяют прокручивать элемент в списке автозаполнения и нажимать Del, чтобы удалить его. Это не работает в элементах управления .NET.

Мне бы очень хотелось, чтобы для этого не приходилось реализовывать собственный пользовательский интерфейс. Я застрял? Есть ли способ включить это, чего я не вижу?


person Robert Rossney    schedule 03.06.2009    source источник
comment
Простите мою наивность, но как вы получаете предложения? Мой единственный опыт разработки автозаполнения связан с набором инструментов ASP.NET AJAX, и, поскольку этот компонент получает предложения от веб-сервиса, я думаю, что его нельзя будет отредактировать. Но, конечно, я могу ошибаться.   -  person Matthew Jones    schedule 04.06.2009
comment
Он использует Windows Forms, а не ASP.NET, который имеет встроенную поддержку автозаполнения из разных источников.   -  person David Wengier    schedule 04.06.2009


Ответы (1)


Из коробки, нет ничего, чтобы сделать это для вас, к сожалению. Я попытался P/Invoking базового FindWindowEx / EnumChildWindows, чтобы увидеть, могу ли я получить дескриптор фактического раскрывающегося списка, но безуспешно (если кому-то удастся это сделать, дайте мне знать!). Хорошая новость (не очень хорошая, но и не ужасная) заключается в том, что автозаполнение на самом деле не является чем-то, что вы полностью должны реализовать самостоятельно, на самом деле есть функция Win32, называемая SHAutoComplete, который можно вызвать с помощью P/Invoked, чтобы помочь вам с автоматическим завершением. Пока не слишком волнуйтесь, потому что это не так просто, как просто P/Invoking и покончить с этим. Однако есть отличная статья CodeProject, которая должна вам очень помочь.

person BFree    schedule 04.06.2009
comment
Это выдающаяся статья, и спасибо. Это явно займет некоторое копание. - person Robert Rossney; 04.06.2009