Glisser déposer

homer73 Messages postés 41 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 14 août 2014 - 21 déc. 2012 à 19:10
homer73 Messages postés 41 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 14 août 2014 - 21 déc. 2012 à 22:23
Salut à tous,
J'ai une question. Je voudrais faire un glisser déposer mais je n'ai pas la technique!
Voici mon problème :
J'ai une listview chargé par une base de donnée (avec le nom affiché et l'ID en valeur).
De l'autre coté j'ai un planning avec différents devoir et des labels ou s'affiche le nom de la personne chargé de ce devoir.

Je voudrais attribué les devoirs en faisant un glisser déposer entre la listview et les labels.

Je pense qu'il serait interressant pour l'utilisateur de manipuler les noms de cette façon mais je ne sais pas comment récupérer les ID facilement.

Help me please!!

Merci d'avance

Nico

5 réponses

Utilisateur anonyme
21 déc. 2012 à 20:32
Bonsoir,

Ajoute une procédure à laquelle tu abonneras tous les événements MouseUp de tes labels.
Dans cette procédure, tu n'auras plus qu'à affecter la/les valeur/s sélectionnée/s de ta ListView et les affecter à ton label :
sub masub(sender as object,e as mouseeventargs) handles label1.MouseUp, label2.Mouseup, ...
    dim MonLabelClic as label = directcast(sender,label)
    monlabelclic.text = ...
 
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
21 déc. 2012 à 20:36
Bonjour,

Voici un petit exemple très basic de drag de la ListView (ListView1) vers un label (DropDestLabel) pour commencer.

Attention, il faut surtout penser à mettre la propriété "AllowDrop" du label de destination à "True".

      Private Sub ListView1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseDown

        'Récupère l'item de liste en dessous de la sourie (celui qui va être déplacé)
        Dim itemDraged As ListViewItem = Me.ListView1.GetItemAt(e.X, e.Y)

        'S'il n'y en a pas on stop
        If itemDraged Is Nothing Then Exit Sub

        'Début du drag de l'item
        Me.ListView1.DoDragDrop(itemDraged, DragDropEffects.Move)

    End Sub

    'La sourie se déplace au dessus du label de destination avec un objet en mouvement 
    '(ici on va gérer les options possibles du drag ou si on veut, 
    'le style du pointeur de la sourie)
    'Si par exemple vous mettez Copy à la place de Move vous constaterez
    'la différence de curseur. En gros, cela permet par exemple sous certaines
    'conditions de ne pas autoriser le drag "DragDropEffects.None"
    'dans ce cas l'utilisateur aura beau lacher l'objet, il ne se passe rien
    Private Sub DropDestLabel_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DropDestLabel.DragOver
        If (e.AllowedEffect And DragDropEffects.Move) = DragDropEffects.Move Then
            e.Effect = DragDropEffects.Move
        End If
    End Sub

    'La sourie lache l'objet sur le label
    Private Sub DropDestLabel_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DropDestLabel.DragDrop

        'Récupère l'item de liste laché
        Dim itemDraged As ListViewItem = CType(e.Data.GetData(GetType(ListViewItem)), ListViewItem)

        'Place le texte de l'item dans le label
        Me.DropDestLabel.Text = itemDraged.Text

    End Sub
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
21 déc. 2012 à 20:42
Et voici l'exemple dans l'autre sens. Donc d'un label (LabelNom) vers la ListView (ListView1)

    Private Sub LabelNom_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles LabelNom.MouseDown
        'Début de drag du texte du label
        Me.LabelNom.DoDragDrop(Me.LabelNom.Text, DragDropEffects.Move)
    End Sub

    Private Sub ListView1_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListView1.DragOver
        If (e.AllowedEffect And DragDropEffects.Move) = DragDropEffects.Move Then
            e.Effect = DragDropEffects.Move
        End If
    End Sub

    Private Sub ListView1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListView1.DragDrop

        'Récupère le texte
        Dim dragedText As String = e.Data.GetData(GetType(String)).ToString()

        'Ajoute un item à la liste
        Me.ListView1.Items.Add(dragedText)

    End Sub
0
Utilisateur anonyme
21 déc. 2012 à 21:58
Je ne pense pas qu'un drag drop soit nécessaire dans ce cas de figure car cela oblige l'utilisateur à exécuter une opération supplémentaire (maintien du bouton) inutile dans ce cas.
Après la sélection d'éléments dans la ListView, un seul clic ensuite sur le label correspondant et c'est terminé.
Enfin moi ce que j'en dis...
Bonne soirée.
0

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

Posez votre question
homer73 Messages postés 41 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 14 août 2014
21 déc. 2012 à 22:23
Merci pour votre aide. Je vais étudier ton idée banana32! Je trouve le glisser déposer plus intuitif mais le simple clique me paraît aussi intéressant. Dès que j'ai testé, je vous tiens au courant.
Encore merci

Nico
0
Rejoignez-nous