Newsgroup: it.comp.lang.visual-basic
Titolo: COMBO BOX Intelligenti

Salve a tutta la lista e complimenti!!!
Il mio problema č che all'interno di una combo-box ho molti elementi (per
esempio gli 8000 e piů comuni italiani).
Vorrei una combo-box tale che digitando le lettere RO si posizionasse sul
primo comune che inizia con RO.
Quindi una combo-box che seleziona non solo sul primo carattere digitato.
Potreste darmi una mano per favore?
Grazie in anticipo per le risposte.
Gianluca.

 Grazie in anticipo per le risposte.
Se devi caricare in un ComboBox tutta la lista dei comuni italiani, è possibile
che questi dati siano archiviati in un database.
Quindi potresti usare il controllo DataCombo (Microsoft DataList Controls 6.0)
che supporta la proprietà MatchEntry che puoi impostare a 1 (dblExtendedMatching
= Corrispondenza estesa: il controllo cerca un elemento corrispondente a tutti i
caratteri digitati. La ricerca viene eseguita mentre i caratteri vengono
digitati e sarà pertanto più accurata).
Ciao!
--
Esteban
Hosted by 
www.seber.it
(Remove nonspammare for reply)

 ha scritto nel messaggio
news:Wi0t8.13560$m41.3...@twister2.libero.it...


 ha scritto

ho visto molte volte invocare l'api di win, ma:
ho un mio vb con un normalissimo combo caricato (via dao) con una lista di
nomi.
ho scritto R nel .text e' si e' posizionato sul primo nome con R.
a combo aperto, ho scritto RO, il combo.text che era selezionato tutto si e'
ovviamente cancellato, e nel listbox e' apparso il primo nome con RO, con
gli altri sotto...
ho visto la risposta di esteban, sensata, ma, imho, il dbcombo e' piuttosto
pesante al form_load ed e' un ocx supplementare, mentre gli ocx che non ci
sono non (si) rompono...

 sono non (si) rompono...
Nel frattempo ho messo un ComboBox su un Form ed ho buttato giù questo codice:
Dim strKBBuffer As String
Dim lngLastIndex As Long
Private Sub Combo1_GotFocus()
    strKBBuffer = ""
    lngLastIndex = 0
End Sub
Private Sub Combo1_KeyPress(KeyAscii As Integer)
    Dim lngIndex As Long
    Dim strNewChar As String
    If KeyAscii > 31 Then
        strNewChar = Chr(KeyAscii)
        For lngIndex = lngLastIndex To Combo1.ListCount - 1
            If Left(Combo1.List(lngIndex), _
                Len(strKBBuffer) + 1) = strKBBuffer & strNewChar Then
                strKBBuffer = strKBBuffer & strNewChar
                Combo1.ListIndex = lngIndex
                lngLastIndex = lngIndex
                If Combo1.Style <> VbComboDrop - DownList Then
                    Combo1.SelStart = Len(strKBBuffer)
                    Combo1.SelLength = Len(Combo1.Text) - Combo1.SelStart
                End If
                Exit For
            End If
        Next
        KeyAscii = 0
    End If
End Sub
Sembra funzionare bene. Non ho provato la velocità con 8000 items...


 End Sub
Ciao!


 Potreste darmi una mano per favore?
Se non hai proprio bisogno di una roba dropdown come il combo potresti usare
una listbox ed una textbox. Nell' evento Change della textbox scrivi:
Private Sub Text1_Change()
For i = 0 To List1.ListCount - 1
    sSearch = Left(List1.List(i), Len(Text1.Text))
    If InStr(LCase(sSearch), LCase(Text1.Text)) Then
        List1.ListIndex = i
        Exit For
    Else
        List1.ListIndex = -1
    End If
Next i
End Sub
Non so quanto potrebbe essere veloce con 8000 elementi, ma penso che si
possa ottimizzare. Prova e fammi sapere.
Ciao
Michele

 possa ottimizzare. Prova e fammi sapere.
Questo è velocissimo:
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
Const LB_FINDSTRING = &H18F
*Selezionare il primo elemento di una ListBox che inizia con
    il  testo digitato in una TextBox:
' inserire nel Text1_Change
List1.ListIndex = SendMessage(List1.hWnd, LB_FINDSTRING, -1, Cstr(Text1.Text))
Tratto da:
http://it-lang-vb.net/download.asp?file=Archivio/FAQ/FAQ00057.HTM&ID=515
Bye, G.
--
Le risposte alle tue domande sono sul Sito Comune
di questo NewsGroup: 
http://it-lang-vb.net/
... e nell'help in linea !