cs_drakkard
Messages postés99Date d'inscriptionlundi 20 juin 2005StatutMembreDernière intervention20 janvier 2009
-
3 oct. 2006 à 11:59
smaeil
Messages postés4Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention13 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
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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.
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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
....
smaeil
Messages postés4Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention13 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