Drag & Drop d'un listbox vers un autre

Tursiop60 Messages postés 38 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 12 septembre 2011 - 18 juil. 2010 à 22:47
Tursiop60 Messages postés 38 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 12 septembre 2011 - 20 juil. 2010 à 08:12
Bonjour à tous,

Je viens chercher un peu d'aide car dans la petite appli que je conçois, j'ai 2 listbox :
- listbox1 qui contient une liste de nom reliée à une base de données,
- listbox2 qui reçoit certains de ces noms qui seront eux-meme stockés dans une base de données

Je souhaiterai, choisir un item de listbox1 et le "glisser" jusque dans listbox2. L'item doit donc figurer dans listbox2 mais ne doit pas etre supprimer de listbox1.

Par conséquent quelqu'un peut-il m'aider ?

Merci

8 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
18 juil. 2010 à 23:10
Bonjour,
Voyez cette source:

http://www.vbfrance.com/codes/PICTURE-DRAG-DROP_45726.aspx
@+
Le Pivert
0
Tursiop60 Messages postés 38 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 12 septembre 2011
18 juil. 2010 à 23:14
Merci,
je vais regarder je vous tiens au courant de l'avancée.

A+
0
Tursiop60 Messages postés 38 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 12 septembre 2011
19 juil. 2010 à 15:56
Bonjour,

Je reviens après avoir vu la source et je l'ai adapté à mon programme. Voici ce que ça donne

Private Sub ListBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown
        On Error Resume Next
        ListBox1.DoDragDrop(ListBox1.Items(ListBox1.IndexFromPoint(e.X, e.Y)), DragDropEffects.Copy Or DragDropEffects.Move)
    End Sub


Private Sub ListBox4_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox4.DragOver
        If Not (e.Data.GetDataPresent(GetType(System.String))) Then
            e.Effect = DragDropEffects.None
        Else
            IndexdInsertion = ListBox4.IndexFromPoint(ListBox4.PointToClient(New Point(e.X, e.Y)))
            e.Effect = DragDropEffects.Copy
        End If
    End Sub


Private Sub ListBox4_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox4.DragDrop
        Dim item As Object = CType(e.Data.GetData(GetType(System.String)), System.Object)
        ListBox4.Items.Add(item)
    End Sub


Ca marche très bien si listbox1 est rempli à partir d'une "collection" d'item prédéfini. En revanche ce que je voudrais c'est pour appliquer cela avec une base de données comme source.

C'est pourquoi j'ai rajouté le code suivant dans le load du windows form.

Private Sub Programme_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.SeanceDébutTableAdapter.Fill(Me.CoachingDataSet.SeanceDébut)
        ListBox1.DataSource = CoachingDataSet.Tables("SeanceDébut")
        ListBox1.DisplayMember = "Nom"
End sub


Malheureusement rien ne se passe quelqu'un aurait-il une idée ?

Merci
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
19 juil. 2010 à 16:22
J'ai chargé la listBox avec un fichier texte et cela fonctionne très bien voici le code:
	 Public IndexdInsertion As Integer
    Const CtrlMask As Byte = 8
    'exemple ListBox
    'Dans le listBox1 de départ, l'évènement MouseDown  déclenche le glisser déplacer par DoDragDrop.
    Private Sub ListBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown
        On Error Resume Next 'si la listBox est vide
        ListBox1.DoDragDrop(ListBox1.Items(ListBox1.IndexFromPoint(e.X, e.Y)), DragDropEffects.Copy Or DragDropEffects.Move)
    End Sub

    'ListBox1.IndexFromPoint(e.X, e.Y) retourne l'Index de l'item ou se trouve la souris à partir des coordonnées e.x et e.y du pointeur)
    'DoDragDrop a 2 arguments: l'élément à draguer et le mode
    'DragOver qui survient quand la souris se balade sur le contrôle d'arrivé, vérifie si le Drop reçoit bien du texte et met dans IndexdInsertion le listItem  qui est sous la souris.
    'Noter que e.x et e.y sont les coordonnées écran , il faut les transformer en coordonnées client (du contrôle) par PointToClient afin d'obtenir l'index de l'item ou se trouve la souris (en utilisant IndexFromPoint. 

    Private Sub ListBox2_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox2.DragOver
        If Not (e.Data.GetDataPresent(GetType(System.String))) Then
            e.Effect = DragDropEffects.None
        Else
            IndexdInsertion = ListBox2.IndexFromPoint(ListBox2.PointToClient(New Point(e.X, e.Y)))
            e.Effect = DragDropEffects.Copy
        End If

    End Sub

    'Enfin dans DragDrop, on récupère le texte dans Item et on ajoute un item après l'item pointé.
    Private Sub ListBox2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox2.DragDrop
        Dim item As Object = CType(e.Data.GetData(GetType(System.String)), System.Object)
        ListBox2.Items.Insert(IndexdInsertion + 1, item)
        'Si la touche Ctrl n'a pas été appuyée, enlever le texte source pour effectuer le 
        'mouvement DragDrop.
        If (e.KeyState And CtrlMask) <> CtrlMask Then
            ListBox1.Items.Remove(ListBox1.SelectedItem)
        End If
    End Sub
   


@+
Le Pivert
0

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

Posez votre question
Tursiop60 Messages postés 38 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 12 septembre 2011
19 juil. 2010 à 20:37
Bonsoir Le Pivert,

Merci de filer un coup de pouce. J'ai mis le meme code mais ça ne fonctionne pas. Je ne vois pas ce qui cloche j'ai regardé les paramètres de ma listbox qui reçoit l'item mais la propriété allowdrop est bien sur true.
0
Tursiop60 Messages postés 38 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 12 septembre 2011
19 juil. 2010 à 22:32
J'ai également essayé avec un fichier texte et ça fonctionne nickel.

Se pourrait-il que ce soit la base de donnée qui pose probleme ?
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
20 juil. 2010 à 07:57
C'est certainement de ce coté qu'il faut chercher, mais je n'y connais pas grand chose.J'ai vu qu'i y avait une propriété de la listBox: DataSource. Se renseigner ?

@+
Le Pivert
0
Tursiop60 Messages postés 38 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 12 septembre 2011
20 juil. 2010 à 08:12
Oui, j'ai bien mis le code pour charger la listbox :

Private Sub Programme_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.SeanceDébutTableAdapter.Fill(Me.CoachingDataSet.SeanceDébut)
        ListBox1.DataSource = CoachingDataSet.Tables("SeanceDébut")
        ListBox1.DisplayMember = "Nom"
    End Sub


La listbox se charge correctement mais je n'arrive pas a déplacer les items dans l'autre listbox.

Merci pour ton aide.
0
Rejoignez-nous