Newsgroup: it.comp.lang.visual-basic
Titolo: [NET] ComboBox

Ciao a tutti, ho un problema con la mia combo.
Quando la popolo da programma usando il seguente codice
            miacombo.BeginUpdate()
            While DrDati.Read
                miacombo.Items.Add(DrDati("descrizione"))
            End While
            miacombo.EndUpdate()
mi ritrovo ad avere al suo interno anche 2000 elementi.
Io vorrei fare in modo che il mio utente digitando le lettere nella
combo il controllo si posizionasse sul primo elemento che inizia con
le lettere digitare.
Mi spiego meglio... io ho 2000 elementi in ordine alfabetico ad
esempio:
comune di abano terme
comune di crema
comune di domodossola
....
se il mio utente digita
comune di d
la combo dovrebbe presentare in automatico comune di domodossola.
Ho provato con il metodo findstring ma non funziona come vorrei...
Qualcuno sa darmi qualche indicazione?
Grazie in anticipo
Giulia

 la combo dovrebbe presentare in automatico comune di domodossola.
Potrebbe essere gestita con una casella di testo sopra la combo
nel TextChanged della casella
esegui l'escursione degli Items della Combo
per il confronto tra la stringa presente nell'Item della combo e quella
inserita nella casella,
puoi utilizzare il metodo String.IndexOf
Ave
giuseppeD

Ciao Giuseppe,
grazie per la tua risposta... ma ops non riesco a usare la proprietą
IndexOf. Mi puoi fare un esempio?
Io ho provato anche la seguente cosa nel change della text
        Dim index As Integer
        index = miacmobo.FindString(TextBox1.Text)
        miacmobo.SelectedIndex = index
ma funziona solo in parte nel senso che se una volta digitato alcune
lettere apro la combo il controllo č posizionato correttamente
sull'elemento ma se l'utente non apre la combo rimane digitato
comune di r
e non mi piace molto...
Ciao
Giulia


 Giulia
Di norma si risponde a fine post.
 Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles TextBox1.TextChanged
        Dim sSearch As String = Me.TextBox1.Text
        Dim sCombo As String
        Dim i As Int32
        For i = 0 To Me.ComboBox1.Items.Count - 1
            Me.ComboBox1.SelectedIndex = i
            sCombo = Me.ComboBox1.Text
            If sCombo.IndexOf(sSearch) <> -1 Then Exit Sub
        Next
    End Sub
Ave
giuseppeD

...

Ciao Giuseppe, 
prima di tutto scusa per l'errore della risposta a inizio post... mi
sono sbagliata. Comunque ti volevo ringraziare per l'esempio ma... il
programma sembra che mi vada in loop. Mi spiego meglio... io nella
combo ho circa 8000 elementi e tutte le volte che cerco di digitare
una lettera nella text mi si scatena l'evento textchange e l'utente
rimane lģ...
Hai qualche altra dritta?
Grazie

 Hai qualche altra dritta?
L'esempio era per spiegare il funzionamento di IndexOf
Nel caso, il valore cercato può trovarsi in qualsiasi parte della stringa.
es.
se digito  al
seleziono ALBALONGA
ma anche ABBADIA SAN SALVATORE
ma anche BADALUCCO
quindi, avendo necessità di selezionare una parola cui le iniziali siano
uguali al numero digitato nella casella di testo,
presumo che la ricerca vada effettuata in un numero di caratteri iniziali
dell'item della combo,
uguale al numero di caratteri digitati nella casella di testo.
Attenzione che nello scorrimento puoi incontrare il digitato più lungo della
parola selezionata nella combo.
Ave
giuseppeD

 giuseppeD
ciao, ho risolto così:
nel click della combo 
--> miacombo.SelectedIndex = miacombo.FindString(text1.Text)
nel SelectedValueChanged della combo
--> text1.Text = miacombo.Text
Grazie 1000 ancora
giulia