Для быстрого поиска нам потребуется
всего одна API-функция и одна константа.
Создаем новый проект, добавляем в него
модуль. С помощью API Text Viewer включаем в данный
модуль API-функцию SendMessage и константу LB_FINDSTRINGEXACT.
СТОП! Функция,
сгенерированная нам API Text Viewer не готова к использованию
в VB! Исправьте
ее, как показано ниже. Для отличия дадим функции другое имя.
В причинах этого мы разберемся в следующей
статье.
Option Explicit
Public Const LB_FINDSTRINGEXACT = &H1A2
Public Declare Function SendMessageByString Lib "user32" _
Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As String) _
As Long
Переходим в форму и располагаем на ней 2
кнопки и ListBox. Первая кнопка заполняет ListBox
значениями от 1 до 500
Private Sub Command1_Click()
Dim x%
For x = 1 To 500
List1.AddItem "Содержимое строки =" +
Str$(x)
Next
End Sub
С помощью второй кнопки осуществляем
непосредственно поиск:
Private Sub Command2_Click()
Dim hw&, t&
hw = List1.hwnd
t = SendMessageByString(hw, LB_FINDSTRINGEXACT, -1, "Содержимое строки = 200")
MsgBox "Искомая запись имеет ListIndex = " + Str$(t&)
End Sub
О чем умолчал Эпплман? Оказывается,
все вышесказанное вполне применимо и к ComboBox.
Вся разница заключается лишь в константе.
Сделайте запись в модуле
Public Const CB_FINDSTRINGEXACT = &H158
и поэкспериментируйте с ComboBox
Рассмотрим
практическое применение. Добавим на форму
TextBox. В свойство Text введем "Содержимое строки =
". Все дело в том, что данная функция осуществляет
поиск с начала строки и чтобы не
повторяться будем просто дописывать цифры.
Private Sub Text1_Change()
Dim hw&
hw = List1.hwnd
List1.ListIndex = SendMessageByString(hw, LB_FINDSTRINGEXACT, -1, ByVal CStr(Text1.Text))
End Sub
Запустите программу и после заполнения ListBox значениями, попробуйте дописать в текстовое поле цифры. Будет происходить позиционирование на первом найденном значении.
| Назад | Далее | Скачать пример |