Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры - VB
Формулировка задачи:
Есть такой вопрос. У меня есть заполненный множеством значений combobox. Я хочу чтобы при вводе в ручную с клавиатуры каких-то символов, букв и т.д. содержимое combobox автоматически фильтровалось, и при вводе каждой последующей буквы кол-во вариантов сокращалось, и в конце концов останется один вариант; или если я задам слово, не имеющееся в списке комбобокса то допустимых значений для выбора совсем предложено не будет.
Например, в комбобоксе след. слова:
стол
полет
стрела
лето
кофе
Я ввожу с клавиатуры в текстовом поле комбобокса букву "о". Список значений автоматически сократится до тех слов, в которых есть буква "о", т.е. останутся:
стол
полет
лето
кофе
потом дописываю, например, буквы "л", получаем "ол" и в списке остается только
стол
Но если я стираю символ, например "о", то у меня возвращаются в комбобокс слова содержащие "л", т.е чтобы операция происходила в "обе стороны".
Например, в комбобоксе след. слова:
стол
полет
стрела
лето
кофе
Я ввожу с клавиатуры в текстовом поле комбобокса букву "о". Список значений автоматически сократится до тех слов, в которых есть буква "о", т.е. останутся:
стол
полет
лето
кофе
потом дописываю, например, буквы "л", получаем "ол" и в списке остается только
стол
Но если я стираю символ, например "о", то у меня возвращаются в комбобокс слова содержащие "л", т.е чтобы операция происходила в "обе стороны".
Решение задачи: «Автоматический выбор из списка значений combobox при ручном вводе с клавиатуры»
textual
Листинг программы
Option Explicit Private Const CB_FINDSTRING = &H14C Private Const CB_SHOWDROPDOWN = &H14F Private Const LB_FINDSTRING = &H18F Private Const CB_ERR = (-1) Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Sub Combo1_GotFocus() SendMessage Combo1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0& End Sub Private Sub Combo1_KeyPress(KeyAscii As Integer) Dim CB As Long Dim FindString As String If KeyAscii < 32 Or KeyAscii > 127 Then Exit Sub If Combo1.SelLength = 0 Then FindString = Combo1.Text & Chr$(KeyAscii) Else FindString = Left$(Combo1.Text, Combo1.SelStart) & Chr$(KeyAscii) End If SendMessage Combo1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0& CB = SendMessage(Combo1.hwnd, CB_FINDSTRING, -1, ByVal FindString) If CB <> CB_ERR Then Combo1.ListIndex = CB Combo1.SelStart = Len(FindString) Combo1.SelLength = Len(Combo1.Text) - Combo1.SelStart Else Combo1.Text = FindString Combo1.SelStart = Len(FindString) End If KeyAscii = 0 End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д