J'ai retrouvé dans du vieux code VS 2005, le moyen de "coller" un label au curseur lors d'un drag and drop.

Ça ressemblait à ça:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 Private Sub DataGrid_Suivi_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGrid_Suivi.MouseDown
        'Drag and drop du suivi
 
        Dim hti As DataGrid.HitTestInfo
        hti = DataGrid_Suivi.HitTest(e.X, e.Y)
 
        'Si on clique sur une en-tête avec le bouton gauche, on commence le Drag and Drop
        If (hti.Type = DataGrid.HitTestType.ColumnHeader) And (e.Button = MouseButtons.Left) Then
 
            from = hti.Column
 
            label1 = New Label
            label1.Visible = False
            DataGrid_Suivi.Controls.Add(label1)
 
            label1.Height = 17
 
            ' On garde dans la variable "drag" le fait qu'on commence le drag and drop
            drag = True
 
            label1.BackColor = DataGrid_Suivi.TableStyles(table_choisi).HeaderBackColor
            label1.Width = DataGrid_Suivi.TableStyles(table_choisi).GridColumnStyles(hti.Column).Width
            label1.Text = DataGrid_Suivi.TableStyles(table_choisi).GridColumnStyles(hti.Column).HeaderText
 
             End If
 
    End Sub
 
 
 Private Sub DataGrid_Suivi_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGrid_Suivi.MouseMove
        If (drag) Then
            ' On déplace le Label en même temps que la souris
            label1.Left = e.X
            label1.Top = e.Y
            label1.Visible = True
        End If
 
    End Sub
Ce code fonctionne est permettait de déplacer des colonnes de datagrid. Et bien sur en même temps que la souris, un label afficher le contenu déplacer.

Bon, aujourd'hui je souhaite faire un drag and drop d'une listview vers un datagridview.

Et je souhaite créer un label qui contient l'élément à déplacer, qui suivra le curseur. Voici un bout de code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 Private Sub MaListView_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MaListView.MouseDown
 
        Try
            Dim index As Integer = MaListView.HitTest(e.X, e.Y).Item.Index
 
            If index > -1 Then
                Drag_bool = True
                MaListView.DoDragDrop(MaListView.Items.Item(index).SubItems(0).Text, DragDropEffects.Copy Or DragDropEffects.Move)
 
                Drag_label = New Label
                Drag_label.Text = MaListView.Items.Item(index).SubItems(0).Text
                Drag_label.ForeColor = Color.Black
                Drag_label.Visible = True
                Drag_label.Height = 25
                Drag_label.Width = 20
                Drag_label.BackColor = Color.Silver
 
                Me.Controls.Add(Drag_label)
 
 
            End If
 
        Catch ex As Exception
            MesLogs.Enregistre_log("MaListView_MouseDown - " & ex.Message, 1)
        End Try
 
    End Sub
Pour déplacer le label en même temps que le curseur je fais:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub MaFormPrincipale_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        If Drag_bool Then
 
 
 
            Drag_label.Left = e.X
            Drag_label.Top = e.Y
            Drag_label.Visible = True
 
 
        End If
 
 
    End Sub
Mais le curseur rester sur le curseur par défaut du drag and drop, c'est pourquoi j'ai fais:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Private Sub MaListView_GiveFeedback(ByVal sender As Object, ByVal e As System.Windows.Forms.GiveFeedbackEventArgs) Handles MaListView.GiveFeedback
 
        e.UseDefaultCursors = False
 
 
    End Sub
Je rappelle que l'action du drag and drop fonctionne... Mais la le curseur reste simplement la flèche par défaut.

Quelqu'un a une idée? Merci d'avance