Autocomplete d'une textbox affichant les données d'une listbox (remplie par data

Résolu
steep0001 Messages postés 5 Date d'inscription jeudi 25 septembre 2008 Statut Membre Dernière intervention 23 février 2011 - 20 janv. 2009 à 19:33
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 - 21 janv. 2009 à 22:31
Bonjour à tous, voila le topo :
j'ai une listbox, celle ci est composée d'un datatable de deux colonne, l'une avec des clés primaire (valuemember), l'autre avec le nom à afficher (displaymember).
Le but du jeu est de réaliser une autocompletion dans la textbox via la list.
au niveau du code, on voit qu'il fait bien la recherche en fonction de ce que l'on tape, mais je ne parviens pas à concaténer ma textbox avec l'autocomplete, elle reste blanche.
enfin : quand j'applique ce même code ur une listbox ans datatable, tout fonctionne très bien, en fait je ne sait pas comment afficher le texte à retourner.
Merci de bien vouloir me venir en aide.
ps : ceux qui parle pour ne rien dire peuvent s'abstenir.

voila le code :
//////////////////////////////////////////////////////////////////////////////
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        MaConnexion.Open()
        MaCommande.CommandText = CommandType.Text
        MaCommande.CommandText = "SELECT noetudiant, NomEtudiant, PrenomEtudiant FROM etudiant order by nometudiant"
        MonCurseur = MaCommande.ExecuteReader

        dt.Columns.Add("C1")
        dt.Columns.Add("C2", GetType(String))
        While MonCurseur.Read() = True
            dt.Rows.Add(MonCurseur.GetDecimal(0), MonCurseur.GetString(1))
        End While
        List1.DataSource = dt
        List1.ValueMember = "C1"
        List1.DisplayMember = "C2"

        MonCurseur.Close()
    End Sub
    Private Sub Text1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Text1.TextChanged

        Try

            If AutoComplete Then

                Dim TextEntered As String = Text1.Text

                Dim iIndex As Integer = List1.FindString(Text1.Text.Trim())

                If iIndex >= 0 Then

                    AutoComplete = False

                    List1.SelectedIndex = iIndex

                    List1.TopIndex = iIndex

                    Text1.Text = dt.DisplayExpression() 'List1.Columns(0).Text

                    AutoComplete = True

                    Text1.Select(TextEntered.Length, Text1.Text.Length)

                Else

                    List1.SelectedIndex = -1

                End If

            End If

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try

    End Sub
    Private Sub Text1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Text1.KeyDown

        AutoComplete = e.KeyCode <> Keys.Delete And e.KeyCode <> Keys.Back

    End Sub

JeanJeanJean

1 réponse

cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
21 janv. 2009 à 22:31
Salut,

Je crois avoir compris ce que tu souhaites faire, ce code va ajouter dans l'autocomplete de Text1, le contenu de List1. Ainsi, en tapant quelques lettres, Text1 va te proposer dans une liste qui apparaitra en dessous de celui-ci et qui contiendra le contenu de List1 correspond à ce que tu as tapé dans Text1.

Si c'est bien ce que tu cherches, tu n'auras plus besoin de la procédure Text1_TextChanged, tout sera fait automatiquement.


<hr size= "2" width="100%" />







Private Sub
 Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     MaConnexion.Open()
     MaCommande.CommandText  = CommandType.Text
     MaCommande.CommandText =   "SELECT noetudiant, NomEtudiant, PrenomEtudiant FROM etudiant order by nometudiant"
     MonCurseur  = MaCommande.ExecuteReader

     dt.Columns.Add("C1")
     dt.Columns.Add("C2",  GetType (String))

     While MonCurseur.Read()  =  True
          dt.Rows.Add(MonCurseur.GetDecimal(0), MonCurseur.GetString(1))
     End While

     List1.DataSource =  dt
     List1.ValueMember =  "C1"
     List1.DisplayMember  = "C2"

     MonCurseur.Close()

     ' Début Modification du code

      Dim  col As New System.Windows.Forms.AutoCompleteStringCollection

     For Each Str As String In List1.Items
          col.Add(Str)
     Next
     Text1.AutoCompleteCustomSource  = col
     Text1.AutoCompleteMode =  AutoCompleteMode.Suggest
     Text1.AutoCompleteSource = AutoCompleteSource.CustomSource

     ' Fin de modification du code

End Sub






<hr size ="2" width="100%" />
++

Fauve

<hr size="2" width="100%" />
Pensez : Réponse Acceptée 
3
Rejoignez-nous