Prévenir les items dupliqués dans un combo

Résolu
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009 - 3 oct. 2006 à 11:59
smaeil Messages postés 4 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 13 juillet 2009 - 13 juil. 2009 à 12:41
Bonjour, bonjour,

voila mon problème, je cherche à prevenir l'insertion dans un combo d'une donnée déjà présente.
Je ne veux pas utiliser le bout de code qui consiste à lire les différents items du combo pour les comparer à la donnée à insérer,
il y beaucoup d'items, je veux utiliser le SendMessage.
J'utilise le code qui suit, mais mon problème c'est que à chaque fois ou je devrais obtenir ComboBox_FindItemIndex = -1 ; j'obtiens
ComboBox_FindItemIndex = 0. Même si le combo est vide...

Private Declare Function SendMessage Lib "user32" _
    Alias "SendMessageA" _
    (ByVal hwnd As Long, _
     ByVal wMsg As Long, _
     ByVal wParam As Long, _
     lParam As Any) As Long

Private Const CB_FINDSTRING As Long = &H18F
Private Const CB_FINDSTRINGEXACT As Long = &H1A2

'--------------------------------------------------------------------------------------------
Private Function ComboBox_FindItemIndex(hwndlist As Long, sData As String) As Long

   If hwndlist <> 0 Then
     'find the first matching item
      ListBox_FindItemIndex = SendMessage(hwndlist, CB_FINDSTRINGEXACT, -1, ByVal sData)
   End If

End Function

'Code dans un bouton
If ComboBox_FindItemIndex(Combo1.hwnd, objRS.fields("myDateInterV")) = -1 Then
    Combo1.AddItem objRS.fields("myDateInterV")
End If

Merci d'avance pour toute aide...

 Bidouille & Cie

6 réponses

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
3 oct. 2006 à 12:40
Bonjour,

je pense que ça ne fonctionne pas avec une Combo.
Essaies le même code avec une ListBox, et tu verras
que ça marche.
3
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
3 oct. 2006 à 12:49
Mouais....
semblerait que ce soit le cas...

Merde, Merde et Merde....

Doit bien y avoir une astuce...

 Bidouille & Cie
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
3 oct. 2006 à 13:35
Tu veux une bidouille ?
essaies ceci
toujours avec le même code
'Code dans un bouton
On error resume next
Combo1.ListIndex= ComboBox_FindItemIndex(Combo1.hwnd, objRS.fields("myDateInterV")) 
 if Combo1.ListIndex=-1 Then _
   Combo1.AddItem objRS.fields("myDateInterV")

ça semble bizzard, mais  il y' a toujours une erreur
quand il ne trouve pas de correspondance.
et quand il y' a erreur Combo1.ListIndex= -1.
0
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
3 oct. 2006 à 14:38
ok merci pour tout

 Bidouille & Cie
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
3 oct. 2006 à 17:10
Je crois qu' on s' est gourré tout les deux
Il semble que c' est possible...je viens de m' en assurer...
Gardes ton premier code et changes seulement
Private Const CB_FINDSTRING = &H14C
Private CB_FINDSTRINGEXACT = &H1A2
(et pas de As Long dans la declaration)

Autre chose : Pourqoui faire appel àune fonction qui ne
comporte qu' une seule ligne.
Fais directement
Combo1.ListIndex= SendMessage(Combo1.Hwnd, CB_FINDSTRINGEXACT, -1,       objRS.fields("myDateInterV"))

 If Combo1.ListIndex=-1 Then 
      ajoute un élément
      ....
0
smaeil Messages postés 4 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 13 juillet 2009
13 juil. 2009 à 12:41
Bonjour,
Je vous propose cette procédure :

Public Sub RemplirCombo(ByRef cbo As ComboBox, ByVal commande As String, ByVal colonne As String)
'Cette procédure permet de remplir la ComboBox à partir de la base de données
cmdTR = cnxTR.CreateCommand()
cmdTR.CommandText = commande
cmdTR.ExecuteNonQuery()
Dim MyReader As OleDbDataReader = cmdTR.ExecuteReader()

Try
If cbo.Items.Count > 0 Then cbo.Items.Clear()
Do While MyReader.Read()
If (cbo.FindStringExact(MyReader.Item(colonne).ToString) = -1) Then
cbo.Items.Add(MyReader.Item(colonne).ToString)
End If
Loop
MyReader.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, "Remplissage de ComboBox")
End Try
End Sub

J'espère que ça répondra à votre sollicitation.

NB : j'ai utilisé un BD access

Smaeil
0
Rejoignez-nous