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:
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.
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
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:
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
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
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
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
Je rappelle que l'action du drag and drop fonctionne... Mais la le curseur reste simplement la flèche par défaut.
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
Quelqu'un a une idée? Merci d'avance
Partager