2009-09-30 5 views
0

В VB6, если в списке, содержащем буквенно-цифровые данные, есть фокус и нажата клавиша символа, выделяется первый элемент в списке, начинающийся с этого символа. Если нажаты несколько символов, первый элемент, начинающийся с каждого символа, выбирается после каждого нажатия символа. Ввод M-A-R-T выберет первое M-слово, затем первое A-слово и т. Д.Отключить динамический поиск при вводе в список

Что я хочу сделать, это написать алгоритм, который динамически выполняет поиск в списке с использованием строки с несколькими символами. Таким образом, набрав M-A-R-T, вы увидите первый элемент, начинающийся с M-A-R-T. Свойство «Сортировка» уже делает это, но мои списки находятся в оболочке, в которой используется настраиваемый метод сортировки, который разбивается, если включен режим «Сортировка».

Я написал весь код для поиска в списке, и он работает правильно, за исключением того, что поведение по умолчанию по-прежнему происходит. Когда я нажимаю M, выделяется первое слово M. Затем нажмите A, и первое слово будет выделено. Когда я отпускаю A, выделяется первое слово M-A. Затем я нажимаю R, и первое слово R выделяется. Затем я отпускаю R, и первое слово M-A-R выделяется. Таким образом, поведение - это то, что я хочу, за исключением того, что выполняется дополнительный поиск где-то между событиями Keydown и Keyup.

Есть ли способ отключить или замаскировать поведение поиска по умолчанию по умолчанию? Или способ заблокировать полосу прокрутки, чтобы система не могла ее прокручивать?

ответ

0

Автоматическая прокрутка происходила через некоторое время после события KeyDown. Если элемент формы отключен, он не будет регистрировать какие-либо ключевые события. Поэтому я добавил эти строки 3 после того, как мой собственный фильтр:

mobjListBox.Enabled = False 
    mobjListBox.Enabled = True 
    mobjListBox.SetFocus 

Я думаю, когда клавиша нажата первой, VB6 выясняет все из ключевых событий он собирается позвонить заранее. Если элемент управления отключен, VB реорганизует список ключевых событий для вызова. Таким образом, отключив элемент управления, я заставляю VB удалять другие события Key (например, Scroll) из рабочего процесса. Затем я снова включу управление и верну его.

Tadaa!

2

Попробуйте добавить это:

Private Sub List1_KeyPress(KeyAscii As Integer) 
    KeyAscii = 0 
End Sub 
Смежные вопросы