Glisser déposer à l'intérieur d'une listbox ?

Signaler
Messages postés
187
Date d'inscription
mercredi 25 septembre 2002
Statut
Membre
Dernière intervention
7 mai 2009
-
Messages postés
128
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
8 juillet 2005
-
Je voudrais déplacer les éléments d'une listbox de façon à changer leur ordre en utilisant dragdrop.

Est-ce possible ?

Un petit exemple de code ?

Merci de tout coeur.

Benedict :)

4 réponses

Messages postés
1247
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
18 février 2019
4
Voila une solution que g fait vite fait:

Dim Lindex1 As Integer

Private Sub List1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)If Me.MousePointer <> 7 Then Lindex1 List1.ListIndex: Me.MousePointer 7: Exit Sub

If Me.MousePointer = 7 Then
Dim Tmp As String
Tmp = List1.List(Lindex1)
List1.List(Lindex1) = List1.List(List1.ListIndex)
List1.List(List1.ListIndex) = Tmp
Me.MousePointer = 0
End If
End Sub


Tu selectionne avec un click gauche l'élément a déplacer-> le curseur change-> tu reclick et ca inverse les 2!!!

Une solution parmis tant d'autre++++
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
Tiens, tu pourrais peux-être adapter le code situé a cette adresse ?
Messages postés
128
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
8 juillet 2005

Bon meme si pcpunch a posté un solution, je donne la mienne, surtout parce que j'ai pas compris le probleme de la même manière :

' 2 variables globales à ne pas oublier sinon ca marche pas
Dim monIndex As Integer
Dim a As String

Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    monIndex = Fix(ListBox1.TopIndex + Y / 12)
    a = ListBox1.List(monIndex)
End Sub

Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    ListBox1.RemoveItem (monIndex)
    monIndex = Fix(ListBox1.TopIndex + Y / 12)
    if monindex<0 then monindex=0
    temp = ListBox1.ListCount - 1
    ListBox1.AddItem (a)

    For i = monIndex To temp
        ListBox1.AddItem (ListBox1.List(i))
    Next
    For i = monIndex To temp
        ListBox1.RemoveItem (monIndex)
    Next
End Sub


C'est moins propre et plus consommateur de ressource mais ca fait un vrai drag&drop ;)
L'autre différence, c'est qu'au lieu d'echanger 2 éléments, ca met l'élément sélectionner avant l'élément sur lequel on le fait glisser.

    monIndex = Fix(ListBox1.TopIndex + Y / 12)


le 12 determine la hauteur du texte en pixel (au jugé ;) mais il vaudrait mieux utiliser les API qui vont bien pour le faire suf que je ne me souviens plus de leur nom -> your turn

voila
Messages postés
128
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
8 juillet 2005

NB : ca a été fait en VBA donc les fonctions sont moins puissantes qu'en VB. Après lecture repide du code proposé par Renfield, je pense que la deuxième methode peut être grandement simplifiée :

Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

ListBox1.RemoveItem (monIndex)
monIndex = Fix(ListBox1.TopIndex + Y / 12)
if monindex<0 then monindex=0
ListBox1.AddItem (ListBox1.List(i),monIndex)
end sub

Ca peut marcher si la methode additem supporte l'insertion d'un élément à un autre endroit qu'en derniere position, ce qui n'est pas le cas en VBA.