Autocomplete d'une textbox affichant les données d'une listbox (remplie par data [Résolu]

Messages postés
13
Date d'inscription
jeudi 25 septembre 2008
Dernière intervention
23 février 2011
- 20 janv. 2009 à 19:33 - Dernière réponse :
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
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
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Dernière intervention
23 mars 2011
- 21 janv. 2009 à 22:31
3
Merci
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 

Merci cs_fauve 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_fauve

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.