cs_Eric25
Messages postés175Date d'inscriptionmardi 19 octobre 2004StatutMembreDernière intervention26 juin 2006
-
19 janv. 2005 à 12:46
cs_Eric25
Messages postés175Date d'inscriptionmardi 19 octobre 2004StatutMembreDernière intervention26 juin 2006
-
19 janv. 2005 à 15:24
Bonjour,
Malgré de multiples recherches sur VBFrance, je n'arrive pas à trouver la réponse à mon problème.
J'ai un combo qui est destiné a affiché un liste de nom(celui-ci n'est pas bloqué en saisie), je veux que en fonction de ce que saisi l'utilisateur, seul le noms commencant par ce qui est saisi s'affiche.
Voilà comment j'ai procédé : sur l'évènement Keypress du combo, j'appelle la procédure destiné à remplir le combo. La requête de cette procédure recherche dans la table tout les noms commencant par ce qui a été saisi.
Le problème c'est qu'à la première frappe, rien ne se passe, la seconde marche (il y a donc une lettre saisie dans le combo et les noms commencant par cette lettre qui s'affiche mais avec parfois un petit bug dans l'affichage correspondant je pense au temps nécessaire à l'éxecution de la requête), et ensuite bizarrement il est impossible de saisir d'autres lettres.
voici la procédure (dont l'appel s'effectue sur le keypress du combo) :
Public Sub CharTouCbSup(Debut As String, Cb As ComboBox)
If Rs_Sup.State = adStateOpen Then
Rs_Sup.Close
End If
'Je recherche le contenu de la table UTILISATEUR
Rs_Sup.Open "select * from [SUPPLEMENT] where [Lib_Sup] like '" & Debut & "%'", Cn, adOpenDynamic, adLockOptimistic
'nettoyage du contenu
Cb.Clear
'Tant que je ne suis pas arrivé à la fin de la liste
While Rs_Sup.EOF = False
'J'ajoute les champs trouvés au contenu du combo un par un
Cb.AddItem Rs_Sup.Fields("Lib_Sup").Value
'Je passe au suivant
Rs_Sup.MoveNext
Wend
Rs_Sup.Close
Quelqu'un a t'il un moyen plus efficace d'obtenir ce chargement sélectif ?
Merci d'avance
A voir également:
Chargement d'un Combo en fonction de ce qui est saisi ds celui-ci
cs_Eric25
Messages postés175Date d'inscriptionmardi 19 octobre 2004StatutMembreDernière intervention26 juin 20063 19 janv. 2005 à 15:24
Merci à tous, j'ai finalement trouvé un autre code (le seul que j'ai réussi à comprendre) qui marche plutot bien, le voici (source de TequilaTex):
PrivateSub Combo1_KeyUp(KeyCode AsInteger, Shift AsInteger)
'Saisie semie-automatique
If KeyCode = vbKeyBack Then Exit Sub
Dim inc1 As Integer
Wcount = Len(Combo1.Text)
If Combo1.Text = "" Then Exit Sub
For inc1 = 0 To Combo1.ListCount - 1
IfLCase(Combo1.Text) = LCase (Left(Combo1.List(inc1), Wcount)) Then
Combo1.Text = Combo1.Text &Mid(Combo1.List(inc1), Combo1.SelStart + 1)
Combo1.SelStart = Wcount
Combo1.SelLength = Len(Combo1.Text)
Exit For
End If
Next inc1
EndSub
guigfs
Messages postés34Date d'inscriptionjeudi 13 mars 2003StatutMembreDernière intervention30 mars 2006 19 janv. 2005 à 13:44
Salut
essai avec ceci (desole mais aucun commentaire)
Private
Sub MaListe_KeyPress(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.KeyPressEventArgs)
Handles
MyBase.KeyPress
Dim maValeur
As
String =
Me.Text
Dim nbCaracteres
As
Integer = maValeur.Length()
Dim nbElements
As
Integer =
Me.Items.Count()
Dim nbCaract
As
Integer
Dim valeurListe
As
String
Dim positionCurseur
As
Integer
Dim i
As
Integer
If e.KeyChar <> Microsoft.VisualBasic.ChrW(8)
Then
maValeur = maValeur.ToUpper()
If
Me.Text <> ""
Then
For i = 0
To (nbElements - 1)
valeurListe = Mid(Convert.ToString(ds.Tables("maTable").Rows(i).Item(macolonne)), 1, nbCaracteres)
valeurListe = valeurListe.ToUpper
If maValeur = valeurListe
Then
Me.SelectedIndex = i
nbCaract =
Me.Text.Length()
cs_Eric25
Messages postés175Date d'inscriptionmardi 19 octobre 2004StatutMembreDernière intervention26 juin 20063 19 janv. 2005 à 14:50
Italia : Il me semble que ton code fonctionne lui avec un combo et une TextBox, mais j'essaye de comprendre son fonctionnement pour voir si cela peut marcher dans mon cas...
merci