combo.add rst!Title.Value
combo.ItemData(combo.NewIndex) = rst!Code.Value
SendMessage(Combo.hWnd, CB_FINDSTRING, -1, ByVal Combo.Text)
Private Sub cbRayon1_Click() 'Это второй Combo
Dim i As Long, valFindR1 As Boolean
If cbRayon1.Text = "" Then Exit Sub
valFindR1 = False
For i = 0 To cbRayon.ListCount - 1
If cbRayon.ItemData(i) = CLng(Trim(cbRayon1.Text)) Then
cbRayon.Text = cbRayon.List(i)
valFindR1 = True
End If
Next i
If valFindR1 = False Then cbRayon.Text = ""
End Sub
Rojohn писал(а):Теперь мне надо предусмотреть клавиши Backspace и Del.
Rojohn писал(а):Всё понятно, смущает только один случай: икрементальный поиск выбирает значение, стираем последний символ, во втором Combo должно быть пусто, но там сохраняется выбранное значение. Как это обработать?
Rojohn писал(а):И если можно, как расчитывается i через API? Или где посмотреть?Спасибо!
Теперь мне надо предусмотреть клавиши Backspace и Del.
Это обработать тем, что если найденное инкрементальным поиском значение не точно совпадает с нужным, то очистить второй вообще.
И если можно, как расчитывается i через API? Или где посмотреть?
Private Const CB_FINDSTRING = &H14C&
Private Declare Function SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)
I = SendMessage(Combo.hWnd, CB_FINDSTRING, -1, ByVal Combo.Text) + 1
Dim valComboStr As Boolean
Sub AutoFillCombo(Combo As ComboBox)
Dim i&, P&
i = SendMessage(Combo.hWnd, CB_FINDSTRING, -1, ByVal Combo.Text) + 1
If i > 0 Then
P = Combo.SelStart
Combo.ListIndex = i - 1
Combo.SelStart = P
Combo.SelLength = Len(Combo.Text) - P
valComboStr = False
Else
valComboStr = True
End If
End Sub
Private Sub cbRayon_Change()
Dim i1&
If Not (LastComboKeyAscii = 8) And Not (LastComboKeyAscii = 46) Then
AutoFillCombo cbRayon
LastComboKeyAscii = 0
If valComboStr = True Then cbRayon1.Text = ""
Else
i1 = SendMessage(cbRayon.hWnd, CB_FINDSTRING, -1, ByVal cbRayon.Text) + 1
If i1 = -1 Then cbRayon1.Text = ""
End If
Verif_Edit
End Sub
I = SendMessage(Combo.hWnd, CB_FINDSTRING, -1, ByVal Combo.Text) + 1
Скорее всего, тебе в данном случае надо перебереть циклом и смотреть не вхождение символов сначала строки, а полное соответствие строк.
Private Const FINDSTRING= &H14C&
Private Const FINDSTRINGEXACT= &H15C&
Private Const CB_FINDSTRINGEXACT As Long = &H158
Sub ChangeCombo(ChCombo As ComboBox, ChCombo1 As ComboBox)
Dim i1&
If Not (LastComboKeyAscii = 8) And Not (LastComboKeyAscii = 46) Then
AutoFillCombo ChCombo
LastComboKeyAscii = 0
If valComboStr = True Then ChCombo1.Text = ""
Else
i1 = SendMessage(ChCombo.hWnd, CB_FINDSTRINGEXACT, -1, ByVal ChCombo.Text) + 1
If i1 = -1 Then ChCombo1.Text = ""
End If
End Sub
Сейчас этот форум просматривают: AhrefsBot, Google-бот, Yandex-бот и гости: 117