powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
11 сообщений из 11, страница 1 из 1
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
    #32413668
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть комбобокс в котором список из более 100 наименований. Нужно чтобы при наборе юзером текста искалось подобное значение из комбобокса и подставлялось вместо набранного текста. Ну типа Like .
Можно ли здесь обойтись без SQL с применением оператора Like , а по другому?
В Access свойство Автоподстановка очень кстати , а VB нету.


И еще как юзеру позволить выбирать только значения из combobox и свои он не может ввести?
...
Рейтинг: 0 / 0
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
    #32413676
boevik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EternalИ еще как юзеру позволить выбирать только значения из combobox и свои он не может ввести?
Выставить у комба Style равным 2

--------------------------------------------------
Никогда не говори никогда
...
Рейтинг: 0 / 0
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
    #32413734
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я делал примерно так:


Private Sub combSearchSelect_KeyPress(KeyAscii As Integer)
Dim t&
Dim sText$
sText = Chr$(KeyAscii)
sText = combSearchSelect.Text
If Not (KeyAscii = 8 Or KeyAscii = 27 Or KeyAscii = 13) Then
t& = SendMessageByString(combSearchSelect.hWnd, CB_FINDSTRING, -1, ByVal combSearchSelect.Text & Chr$(KeyAscii))
If t >= 0 Then
SendMessageByNum combSearchSelect.hWnd, CB_SHOWDROPDOWN, True, ByVal 0&
SendMessageByNum combSearchSelect.hWnd, CB_SETTOPINDEX, t, ByVal 0&

'combSearchSelect.ListIndex = t
combSearchSelect.Text = sText & Chr$(KeyAscii)
KeyAscii = 0
End If
combSearchSelect.SelStart = Len(sText & Chr$(KeyAscii)) + 1
End If
End Sub


В модуль:
Public Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As String) As Long
Public Declare Function SendMessageByNum Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Const LB_FINDSTRING = &H18F
Public Const CB_SHOWDROPDOWN = &H14F
Public Const CB_SETTOPINDEX = &H15C




Может быть не лучший вариант но стандартных средств, насколько я знаю, нет.
В данном случае, при наборе текста пользователем, если обнаружено схожее значени(Like) вываливается список и первый matching item устанавливается в верхний индекс и автоматически выбирается. Возможны конечно вариации, но это на ваше усмотение.

Удачи.


Magnus
...
Рейтинг: 0 / 0
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
    #32413805
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин то что нужно , спасибо. Работает.

Блин , а когда собственной башкой то думать буду

Слушай , подобное значение появляется только после нажатия клавиши ввода, а надо бы чтобы подобные значения появлялись непрерывно в поле.
Ну а так просто класс. Вот немного бы усовершествовать . Как считаешь? Или у меня как то не так работает?
...
Рейтинг: 0 / 0
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
    #32413842
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а надо бы чтобы подобные значения появлялись непрерывно в поле
Прямо в поле ввода?
Ну так сначала так и было :)
Нужно кое что убрать от туда. На счет самому подумать :)
Посмотри описание использованных констант :)
Щас просто занят сильно. Если не сделаешь, я позже нарисую.


Magnus
...
Рейтинг: 0 / 0
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
    #32413908
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вожусь.
...
Рейтинг: 0 / 0
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
    #32414033
Фотография ulis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Option Explicit

'***************************************************************************************
' Для комбо-бокса
Global Const LB_FINDSTRING = &H18F
Global Const CB_ERR = (-1)
Global Const CB_FINDSTRING = &H14C

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
'
'************************************************************************************



'****************************************************************************************************
'Purpose : Auto completes a combo box during the KeyPress event, based on the text typed in by the user.
'Inputs : cboComplete The combo box to auto complete (completes the current text based on
' the listitems in the combo).
' KeyAscii The Ascii value of the key pressed (as supplied by the keypress event)
' [bLimitToList] If True, will only allow the user to enter values which are in the combos list.
'Outputs : Returns the KeyAscii value or zero if bLimitToList = True and the user types an invalid character.
'Author : Andrew Baker
'Date : 25/03/2001
'Notes : Call the routine from the _KeyPress event of the combo.
' The combo must be of a vbComboDropDown style, eg. KeyAscii = ComboAutoComplete(Combo1, KeyAscii, False)
'
'
' Данную функцию чуть чуть подправил, чтобы она работала также и с кириллицей (ulis)
'
'****************************************************************************************************


Public Function ComboAutoComplete(ByRef cboComplete As ComboBox, ByVal KeyAscii As Integer, Optional ByVal bLimitToList As Boolean = False) As Long

Dim lRetVal As Long
Dim sSearch As String

On Error GoTo ErrFailed

If cboComplete.Style <> vbComboDropdown Then
ComboAutoComplete = KeyAscii
Exit Function
End If

If KeyAscii = 8 Then

If cboComplete.SelStart <= 1 Then
cboComplete.Text = ""
ComboAutoComplete = 0
Exit Function
End If

If cboComplete.SelLength = 0 Then
sSearch = UCase$(Left$(cboComplete.Text, Len(cboComplete) - 1))
Else
sSearch = Left$(cboComplete.Text, cboComplete.SelStart - 1)
End If

ElseIf KeyAscii < 32 Or KeyAscii > 255 Then
Exit Function
Else
If cboComplete.SelLength = 0 Then
sSearch = UCase$(cboComplete.Text & Chr$(KeyAscii))
Else
sSearch = Left$(cboComplete.Text, cboComplete.SelStart) & Chr$(KeyAscii)
End If
End If

lRetVal = SendMessage(cboComplete.hwnd, CB_FINDSTRING, -1, ByVal sSearch)

If lRetVal = CB_ERR Then
If bLimitToList = True Then
ComboAutoComplete = 0
Else
ComboAutoComplete = KeyAscii
End If
Else
cboComplete.ListIndex = lRetVal
cboComplete.SelStart = Len(sSearch)
cboComplete.SelLength = Len(cboComplete.Text) - cboComplete.SelStart
ComboAutoComplete = 0
End If

Exit Function

ErrFailed:
ComboAutoComplete = KeyAscii
End Function
...
Рейтинг: 0 / 0
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
    #32414068
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работает, ищет только в лёт!
Спасибо.
...
Рейтинг: 0 / 0
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
    #32414633
Фотография =viT=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще вариант,
(1) в отдельный модуль поместить:

Public Sub FindInCombo(cbo As ComboBox)
'(C)Pinchuk Vitaly & Gura Nataly
'#Created: 05.02.04 - 13:13
'#Modifyed: 19.02.04 - 09:55

Dim i As Integer, InputLen As Integer
If cbo.Text = "" Then
Exit Sub
End If
For i = 0 To cbo.ListCount
If InStr(UCase(cbo.List(i)), UCase(cbo.Text)) = 1 Then
InputLen = Len(cbo.Text)
cbo.Text = cbo.List(i)
cbo.SelStart = InputLen
cbo.SelLength = Len(cbo.List(i)) - InputLen
End If
Next i
End Sub

(2) Обработчик комбобокса выглядит так:
Private Sub cboJobTitles_Change()
FindInCombo cboJobTitles
End Sub
...
Рейтинг: 0 / 0
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
    #32414653
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил.Тоже ништяк.

Только вот после нахождения похожего значения и подстановки его в поле оно не стирается бэкспейсом!
...
Рейтинг: 0 / 0
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
    #32415220
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, так проверь код клавиши.

Типа этого
ElseIf KeyAscii < 32 Or KeyAscii > 255 Then

Или исключением, как было в моем первом примере


Magnus
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]