Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

FAIRE GLISSER UN ÉLÉMENT DANS UNE LISTBOX FAÇON "WINAMP"


Information sur la source

Catégorie :Divers Classé sous : listbox, winamp, glisser, éléments, souris Niveau : Débutant Date de création : 31/12/2004 Date de mise à jour : 13/07/2007 18:23:27 Vu : 2 814

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

Description

Alors plutot que d'utiliser deux boutons "Monter" et "Descendre" pour modifier la position d'un élément sélectionné dans une ListBox, je trouve plus sympa et aussi plus pratique de pouvoir le faire glisser avec la souris jusqu'à la position désirée (comme pour la playlist de Winamp par exemple)

Je tiens à remercier "hvb" dont la source ( http://www.vbfrance.com/code.aspx?id=4908 )m'a été bien précieuse, mais qui a malheureusement pour défaut de ne pas modifier la ListBox en "temps réel", mais seulement lorsque l'on relache le bouton de la souris.
 

Source

  • Dim ancien_index As Integer 'index de l'élément de départ
  • Dim nouvel_index As Integer 'nouvel index de la souris en "temps réel"
  • Dim nom_index As String 'nom de l'élément de l'ancien index
  • 'Action à effectuer lors d'un clic gauche de la souris sur un élément de la liste
  • Private Sub Liste1_MouseDown(button As Integer, shift As Integer, x As Single, y As Single)
  • ancien_index = Liste1.ListIndex
  • End Sub
  • 'Action à effectuer lors d'un mouvement de la souris dans la liste
  • Private Sub Liste1_MouseMove(button As Integer, shift As Integer, x As Single, y As Single)
  • If button = 1 Then 'il faut évidemment que le clic gauche reste enfoncé
  • nouvel_index = Liste1.ListIndex
  • If nouvel_index <> ancien_index Then 'il faut aussi que la souris ai quitté l'ancien élément
  • 'on inverse ensuite les deux éléménts
  • nom_index = Liste1.List(ancien_index)
  • Liste1.RemoveItem ancien_index
  • Liste1.AddItem nom_index, nouvel_index
  • 'on modifie enfin l'index de l'élément séléctionné
  • Liste1.ListIndex = nouvel_index
  • 'on reinitialise l'ancien index a la nouvelle position
  • ancien_index = nouvel_index
  • End If
  • End If
  • End Sub
Dim ancien_index As Integer 'index de l'élément de départ
Dim nouvel_index As Integer 'nouvel index de la souris en "temps réel"
Dim nom_index As String 'nom de l'élément de l'ancien index


'Action à effectuer lors d'un clic gauche de la souris sur un élément de la liste
Private Sub Liste1_MouseDown(button As Integer, shift As Integer, x As Single, y As Single)
ancien_index = Liste1.ListIndex
End Sub


'Action à effectuer lors d'un mouvement de la souris dans la liste
Private Sub Liste1_MouseMove(button As Integer, shift As Integer, x As Single, y As Single)
If button = 1 Then 'il faut évidemment que le clic gauche reste enfoncé
    nouvel_index = Liste1.ListIndex
    If nouvel_index <> ancien_index Then 'il faut aussi que la souris ai quitté l'ancien élément
        'on inverse ensuite les deux éléménts
        nom_index = Liste1.List(ancien_index)
        Liste1.RemoveItem ancien_index
        Liste1.AddItem nom_index, nouvel_index
        'on modifie enfin l'index de l'élément séléctionné
        Liste1.ListIndex = nouvel_index
        'on reinitialise l'ancien index a la nouvelle position
        ancien_index = nouvel_index
    End If
End If
End Sub

Conclusion

Je ne crois pas qu'il y est de bugs : la source dont je me suis inspiré n'en avait déja pas j'avais pas envie d'en rajouter ;)
merci de m'envoyer vos réactions :)
 

Historique

13 juillet 2007 18:23:28 :
Je viens tout juste de revoir cette petite source: - j'y ai incorporé les suggestions apportées par "soldier8514" (il y a exactement 2 ans pile, pure coïncidence!), qui évite de redéclarer quelques variables à chaque mouse_move. - optimisation de la fin du code (modification de l'élément sélectionné, ainsi que la réinitialisation de l'ancien index, qui sont codés de façon plus direct)

Commentaires et avis

signaler à un administrateur
Commentaire de Saros le 01/01/2005 13:37:49

Astucieux, je trouve :)

signaler à un administrateur
Commentaire de hvb le 02/01/2005 22:13:40

merci de me citer, c'est honnête. :)

et tu as eu raison de le remanier avec l'evenement mouse_move, c'est plus intuitif pour l'utilisateur.
tu pourrais aussi remanier la methode pour plusieurs éléments maintenant !

signaler à un administrateur
Commentaire de olid le 06/01/2005 13:14:03

Simple, efficace, merci :o)

signaler à un administrateur
Commentaire de cresus18 le 06/01/2005 14:54:03

je vous remercie tous pour vos feedbacks, content que ça vous plaise.

Par contre hvb, désolé mais je n'ai vraiment que peu de temps libres pour programmer et j'ai mon programme à finir en priorité. Peut être plus tard...

Bonne prog à tous !

signaler à un administrateur
Commentaire de soldier8514 le 13/07/2005 22:23:44

simple et efficace ! on pourrais peut etre  éviter  de redéclarer à chaque mouse_move les variables suivantes :

# Dim nouveau As Integer 'nouvel index de la souris en "temps réel"
# Dim temp As String 'nom de l'élément de l'ancien index

sinon rien à dire sinon bravo

signaler à un administrateur
Commentaire de themadeone le 12/02/2008 01:30:21

j'ai un ptit probléme avec ton code , c'est que
Private Sub Liste1_MouseDown(button As Integer, shift As Integer, x As Single, y As Single)
ancien_index = Liste1.ListIndex
End Sub
ne veut pas marcher!:s:s
stp!si vous pouvez m'aider ca serai gentil de votre part!

signaler à un administrateur
Commentaire de cresus18 le 13/02/2008 23:37:45

La seule raison plausible qui me vient à l'esprit serait que tu n'ais pas déclaré la variable 'ancien_index' globale afin de la rendre visible partout dans ton code... Sinon, si le nom de ta Sub est 'Liste1_MouseDown', est-ce que ta liste a bien le même nom 'Liste1' ?

Ajoutes cette ligne 'Debug.Print (ancien_index)' dans la Sub Liste1_MouseMove(...) à l'intérieur de la 2ème boucle IF pour vérifier (dans la fenètre 'immediate') que la variable 'ancien_index' ait gardé sa valeur.

A part ça je ne vois pas, ou bien le problème vient d'ailleurs.

signaler à un administrateur
Commentaire de themadeone le 13/02/2008 23:45:09

Non!l nom d mon listbox est listbox1 ce qui fai que ancien_index=listbox1.listindex
mais il souligne sur listindex par ce quel ne figure pas!!!

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

"Font" différent dans un même listbox [ par Pace ] Est-ce que quelqu'un c'est si cela est possiblede mettre différents font pour les éléments d'un même listbox? Ou à la limite mettre certains éléments VB et les LISTBOX [ par zorglup ] est il possible de changer la couleur des éléments d'une ListBox... sinon, est il possible d'empêcher la sélection d'1 des éléments d'une ListBox ?! VB et XML [ par pierreII ] Bonjour,J'ai réalisé un petit programme qui affiche du texte dans une ListBox, j'aimerais récupérer les éléments de cette ListBox, et les mettre dans Sauvegarder les éléments d'une ListBox dans un fichier texte [ par vortexx ] Salut tt le monde, j'ai un petit problème, j'aimerais savoir commen ton fait pour sauvegarder les éléments d'une ListBox dans un fichier texte ou rtf. Boucle avec une listbox [ par FloFlo78 ] bonjour, je suis novice en VB et j'aurais besoin d'un coup de pouce: je voudrais faire une boucle pr enregistrer des éléments d'une liste ds une table glisser listbox->treeview [ par bingo974 ] Bonjour,Je n'arrive pas à trouver un code sur vbfrance me permettant de réaliser un dragdrop entre une listbox et un treeview en utilisant OLEDRAG OLE ListBox et Roulette de souris [ par Algade ] AlgadeMa roulette fonctionne parfaitement dans les listbox sous windows ou avec Word et aussi en développement sous VB lorsque je fait défiler le code deux éléments dans une listbox [ par vbKiller187 ] VBKiller187Bonjour tous le monde,j'ai une question urgente !!je voudrais afficher deux champs d'une table dans Glisser déposer dans une liste [ par cheche ] Bonjour,je voudrais coder une liste dont les éléments pourraient être interverti par simple glisser déposer.Apparemment le drag & drop déplace la list Supprimer des éléments sélectionnés dans une ListBox [ par MaitreNicodeme ] Bonjour à tous :) !J'utilise 2 ListBox. La première, que l'on nommera List1, contient des paramètres sélectionnables par l'utilisateur.La deuxième, qu


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,655 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.