Главная страницаОбратная связьКарта сайта

Быстрый поиск элемента в списке



'Пример 1.
'Когда пользователь начинает вводить текст, вручную, в объекте ComboBox
'(Combo1) - ему автоматически подсвечиваются возможные варианты слов
'(содержащиеся в списке ComboBox'а)

Dim J As Integer
Dim Letter As String

Private Sub Combo1_Change()
Letter = Mid$(Combo1.Text, 1, J)
For i = 0 To Combo1.ListCount - 1
If Letter = Mid$(Combo1.List(i), 1, J) Then
Combo1.Text = Combo1.List(i)
Exit For
End If
Next i
Combo1.SelStart = J
Combo1.SelLength = Len(Combo1.Text)
End Sub

Private Sub Combo1_Click()
Letter = ""
J = 0
End Sub

Private Sub Combo1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 8
J = J - 1
If J < 0 Then J = 0
Exit Sub
Case Else
J = J + 1
Exit Sub
End Select
End Sub

'Пример 2.
'Разместите на форме элемент ComboBox. Запустите проект на выполнение и
'попробуйте набрать в ComboBox'е "ext".
'Как вы понимаете, за быстрый поиск отвечает событие Combo1_KeyUp.

Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long

Function GetAllExts() As Variant
Dim lRegResult As Long
Dim lCounter As Long
Dim hCurKey As Long
Dim strBuffer As String
Dim lDataBufferSize As Long
Dim intZeroPos As Integer

lCounter = 0
lRegResult = RegOpenKey(&H80000000, "", hCurKey)
Do
lDataBufferSize = 255
strBuffer = String(lDataBufferSize, " ")
lRegResult = RegEnumKey(hCurKey, lCounter, strBuffer, lDataBufferSize)
If lRegResult = 0& Then
intZeroPos = InStr(strBuffer, Chr$(0))
If Left(strBuffer, 1) = "." Then
Form1.Combo1.AddItem LCase(Right(strBuffer, Len(strBuffer) - 1))
End If
lCounter = lCounter + 1
Else
Exit Do
End If
Loop
End Function

Private Sub Form_Load()
GetAllExts
End Sub

Private Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer)
Dim st As Long

If KeyCode <> vbKeyReturn And KeyCode <> vbKeyBack And KeyCode <> vbKeySpace Then
st = Len(Combo1.Text)
If st < 3 Then
For x = 0 To Combo1.ListCount - 1
If Left(Combo1.List(x), st) = Combo1.Text Then
Combo1.ListIndex = x
Combo1.SelStart = st
Combo1.SelLength = Len(Combo1.Text) - st
Exit For
End If
Next x
End If
End If
End Sub


Обсудить статью на форуме


Если Вас заинтересовала или понравилась информация программирование на Visual Basic - "Быстрый поиск элемента в списке", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу:

Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!
   


Copyright © 2008 - 2022 Дискета.info