Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
|
|||
|---|---|---|---|
|
#18+
Есть комбобокс в котором список из более 100 наименований. Нужно чтобы при наборе юзером текста искалось подобное значение из комбобокса и подставлялось вместо набранного текста. Ну типа Like . Можно ли здесь обойтись без SQL с применением оператора Like , а по другому? В Access свойство Автоподстановка очень кстати , а VB нету. И еще как юзеру позволить выбирать только значения из combobox и свои он не может ввести? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 14:33 |
|
||
|
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
|
|||
|---|---|---|---|
|
#18+
EternalИ еще как юзеру позволить выбирать только значения из combobox и свои он не может ввести? Выставить у комба Style равным 2 -------------------------------------------------- Никогда не говори никогда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 14:36 |
|
||
|
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
|
|||
|---|---|---|---|
|
#18+
Я делал примерно так: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 14:53 |
|
||
|
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
|
|||
|---|---|---|---|
|
#18+
Блин то что нужно , спасибо. Работает. Блин , а когда собственной башкой то думать буду Слушай , подобное значение появляется только после нажатия клавиши ввода, а надо бы чтобы подобные значения появлялись непрерывно в поле. Ну а так просто класс. Вот немного бы усовершествовать . Как считаешь? Или у меня как то не так работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 15:19 |
|
||
|
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
|
|||
|---|---|---|---|
|
#18+
а надо бы чтобы подобные значения появлялись непрерывно в поле Прямо в поле ввода? Ну так сначала так и было :) Нужно кое что убрать от туда. На счет самому подумать :) Посмотри описание использованных констант :) Щас просто занят сильно. Если не сделаешь, я позже нарисую. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 15:37 |
|
||
|
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
|
|||
|---|---|---|---|
|
#18+
Вожусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 15:58 |
|
||
|
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 16:47 |
|
||
|
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
|
|||
|---|---|---|---|
|
#18+
Работает, ищет только в лёт! Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 17:06 |
|
||
|
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
|
|||
|---|---|---|---|
|
#18+
Вот еще вариант, (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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 09:22 |
|
||
|
ComboBox. Поиск в нем. Как разрешить выбирать только из списка?
|
|||
|---|---|---|---|
|
#18+
Проверил.Тоже ништяк. Только вот после нахождения похожего значения и подстановки его в поле оно не стирается бэкспейсом! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 09:38 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=32414653&tid=2170047]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
58ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 260ms |
| total: | 408ms |

| 0 / 0 |
