Получение дескриптора выпадающего окна автозаполнения текстового поля в winforms - PullRequest
4 голосов
/ 28 октября 2010

Я хотел настроить ширину выпадающего списка автозаполнения текстового поля.Я не хочу регулировать ширину этого текстового поля, но только выпадающий Autocomplete.Я знаю, что я никак не могу увеличить ширину выпадающего меню автозаполнения, используя свойства, поставляемые с текстовым полем.

Поэтому я хотел узнать, есть ли способ получить дескриптор этого поля автозаполнения и затем увеличитьширина этого выпадающего списка без изменения ширины текстового поля?

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

Ответы [ 2 ]

5 голосов
/ 15 декабря 2010

Не думаю, что вы можете использовать реализацию Microsoft autocomplete , в которой нет опции для настройки ширины выпадающего меню.

Создайте фоновый поток, чтобы не мешать печатать, и подключите событие изменения текста в поле со списком или в текстовом поле, чтобы обновить список кандидатов (в режиме автозаполнения, так как вы упоминаете выпадающий список). Вы можете добавить / удалить элементы списка со списком , если у вас есть поле со списком. Но для выпадающего списка и элементов текстового поля вам нужно всплывающее окно

Легко получить всплывающее окно для показа, но вам не нужно использовать фиксированное положение, чтобы оно не исчезло с экрана, когда текстовое поле расположено близко к краю экрана. И логика фокусировки немного сложна. вам нужно сосредоточиться на текстовом поле, если пользователь не нажимает клавиши со стрелками, чтобы сделать выбор.

так когда фокус находится на текстовом поле: клавиши со стрелками перемещают фокус на всплывающее окно другие ключи переходят в текстовое поле, если они не обрабатываются самим диалогом, за исключением клавиши удаления, когда мышь находится над всплывающим окном. когда фокус на всплывающем окне: клавиши со стрелками перемещают фокус на элемент-кандидат или текстовое поле другие ключи переходят в текстовое поле, если не обрабатываются самим диалогом, кроме клавиши удаления

щелчки мышью: отклонить всплывающее окно вне или всплывающее окно. обновить значение текстового поля, если во всплывающем окне выбран элемент-кандидат

Требуется много усилий для правильной фокусировки / нарезки резьбы. Если вы можете позволить себе пространство формы, вы можете просто добавить в форму список с фиксированной шириной, например, панель указателя справки Visual Studio.

3 голосов
/ 10 января 2011

Пройдя через множество постов в блоге и различные статьи, я пришел к общему мнению, что практически невозможно найти решение моей проблемы так, как я хотел. Поэтому я решил либо предложить собственное решение, либо, как сказал Шэн Цзян, мне нужно реализовать собственный объект автозаполнения.

Я нашел решение, которое соответствует моим требованиям, увеличив ширину текстового поля в соответствии с самой большой строкой в ​​списке строк автозаполнения, в то время как я добавляю собственный источник автозаполнения. Как я уже сказал, я не могу увеличить ширину текстового поля из-за ограничения размера формы, поэтому я решил оставить это текстовое поле на панели и увеличить размер текстового поля внутри него. Панель не будет расти вместе с текстовым полем, чтобы решить мою проблему.

Я знаю, что это не идеальное решение, но оно соответствует моим требованиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...