Динамическое изменение списка автозаполнения текстового поля вызывает исключение AccessViolationException, есть ли совет?

Мой клиент хотел иметь текстовое поле в форме «Клиент» приложения, которое предлагает соответствующие окончания для начального названия улицы. Он начинает вводить название улицы, и текстовое поле предлагает список улиц, которые начинаются с последовательности символов, которые он ввел в текстовое поле.

Я сказал себе: все в порядке, у текстовых полей есть свойство AutoCompleteCustomSource, и даже несмотря на то, что список общих названий улиц будет длиннее, чем он может быть предварительно заполнен при запуске, я мог бы просто попасть в базу данных с запросом, заполнить AutoCompleteStringCollection и покажите это пользователю.

Вот в чем дело: если я заставлю список заполняться при каждом нажатии / нажатии любой клавиши, программа выйдет из строя и выдает исключение AccessViolationException.

Я выяснил, что это потому, что: Элемент управления находится в середине отображения списка автозаполнения, когда в то же время он изменяется, что приводит к сбою.

Когда вы обновляете список автозаполнения, элемент управления воссоздается с новыми указателями. События клавиатуры и мыши (KeyPress, MouseOver, MouseLeave, MouseHover) пытаются ссылаться на указатели старого элемента управления, которые теперь недопустимы в памяти, вызывая нарушение доступа к памяти.

Базовая реализация автозаполнения не позволяет изменять объект списка кандидатов автозаполнения после того, как он был установлен в окне. Чтобы разрешить изменение списка, WinForms уничтожает элемент управления Edit или ComboBox и воссоздает его. Это вызывает исключение, если базовый элемент управления уничтожается, пока окно автозаполнения все еще использует его.

Я читал об этом в MSDN , их разрешение:

Не изменять динамически список кандидатов автозаполнения во время ключевых событий.

Я также пробовал все из этой ветки

Итак, как я могу заставить эту работу работать, если я настаиваю на предложении соответствующих названий улиц, нажатие клавиши за клавишей?

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

9
задан James Jithin 7 February 2012 в 10:55
поделиться