Автозаполнение в Combo

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Автозаполнение в Combo

Сообщение xqz_me » 10.06.2006 (Сб) 12:08

Подскажаите, как правильней организовать автозаполнение в Combo (как и ie, когда адрес вводишь, он предлагает возможные варианты). В данному случае надо выводить под комбо (как ie) элементы, содержащиеся в самом Combo (или соответстуещем массиве), начинающиеся с уже введённой в комбо строки. Я представляю это себе пулём отображение под комбо listbox-а с соотвествующими элементами, но там возникнут определённые проблемы с фокусом (веделить элемент листбокса при нажатии клавиши "Вниз" и вернуть фокус самому комбо при продолжении набора). Есть ли другой способ/пример?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.06.2006 (Сб) 12:14

xqz_me, начнёшь пользоваться поиском или замечания будешь получать?
Посмотри список тем в Кирпичах. Так, для интереса.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 10.06.2006 (Сб) 12:28

Поиском я этого не нашёл, извините.
Это немного не то. Привожу пример: вводим значения sa, saa, saaa, saab, saadt, например. Вводим в комбо букву s он предложит дополнить букву а, а при дальнейшем вводе (слова saadt, например) он уже ничего предлагать не будет. В условиях, когда все значения комбо начинаются с "АТ" это вообще бесполезная вещь. Всё-таки хотелось бы, чтобы автозаполнение было устроено так, как в ie.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.06.2006 (Сб) 12:34

Ну дополни пример, делов-то.

SendMessage c.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 10.06.2006 (Сб) 12:44

Если не трудно, можете рассказать, каким образом его дополнить.

Код: Выделить всё
Option Explicit

Private Const CB_FINDSTRING = &H14C&

Private Declare Function SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

Private LastComboKeyAscii&

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
P = Combo.SelStart
Combo.ListIndex = I - 1
Combo.SelStart = P
Combo.SelLength = Len(Combo.Text) - P
End If
End Sub

Private Sub Combo1_Change()
If Not (LastComboKeyAscii = 8) And Not (LastComboKeyAscii = 46) Then AutoFillCombo Combo1
LastComboKeyAscii = 0
End Sub

Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
LastComboKeyAscii = KeyCode
End Sub

Private Sub Command1_Click()
Combo1.AddItem Text1.Text
End Sub

kostyanet
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 10.06.2006 (Сб) 10:36

Сообщение kostyanet » 10.06.2006 (Сб) 13:15

Насчет "как в IE". Если там, например есть адрес: www.yourdomain.com, и вы будете набирать domain... то никакого автопоиска не будет. Пока вы не наберете www.domain... тогда сработает - дополнит строку в выделенном фрагменте до полной по ближайшему варианту.

А может быть включить свойство Sorted - тогда включится функция быстрого поиска.

То, что вы описали, не в IE, а в CHM'ах делается - в компилированных хелпах на вкладках поиска и списка оглавлений.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот], Majestic-12 [Bot], Yandex-бот и гости: 132

    TopList