How to draw control while is moved in a Drag-and-drop event

时间秒杀一切 提交于 2021-02-11 10:02:30

问题


In Vb.net, through Drag and Drop events, a control (button) is moved from a Panel to another Panel.

Is there any way or option to draw the control (button) while is being moved by cursor? Now I have only reached to change cursor shape, and when the action of Drag and Drop is finished, the control is drawn in its new panel parent.

Thanks in advance.

Edit: Added code

public Sub New()
    InitializeComponent()
    '….
    Panel1.AllowDrop = True
    Panel2.AllowDrop = True

    AddHandler Panel1.DragEnter, AddressOf panel_DragEnter
    AddHandler Panel2.DragEnter, AddressOf panel_DragEnter

    AddHandler Panel1.DragDrop, AddressOf panel_DragDrop
    AddHandler Panel2.DragDrop, AddressOf panel_DragDrop

    AddHandler Button1.MouseDown, AddressOf button1_MouseDown

    Panel1.Controls.Add(Button1)

 End Sub

 Sub button1_MouseDown (ByVal sender As Object, e As MouseEventArgs)
     sender.dodragdrop(sender, DragDropEffects.Move)
 End Sub

 Sub panel_DragEnter (ByVal sender As Object, e As DragEventArgs)
     e.Effect = DragDropEffects.Move
 End Sub

 Sub panel_DragDrop (ByVal sender As Object, e As DragEventArgs)
     Dim aButton As Button = DirectCast(e.Data.GetData(GetType(Button)), Button)
     Dim aPanel As Panel = DirectCast(sender, Panel)

     button.Parent = aPanel
 End Sub

回答1:


You have to create a bmp/cursor on the MouseDown event. Then, in the GiveFeedback event, you have to disable UseDefaultCursors so that it doesn't change back to the default cursor as soon as they move the mouse. Then, in the DragOver event, you set your cursor object (created in MouseDown) to be the current cursor. This will also serve to reapply your custom cursor if the current cursor got reset somehow to another cursor. This would happen if you moved your cursor off of the designated dragging area and it changed to the "can't drop it here" icon.

You have to setup these Subs to Handle the appropriate events on the corresponding controls. Also, when setting up the bitmap, "c" is the control in question that it needs to draw. This may or may not be the sender, depending on your circumstances, so it's up to you to determine which control you want drawn at that time.

Private cur As Cursor

Private Sub GiveFeedback(sender As Object, e As GiveFeedbackEventArgs)
    e.UseDefaultCursors = False
End Sub

Private Sub MouseDown(sender As Object, e As MouseEventArgs)
    Dim bmp As Bitmap = New Bitmap(c.Width, c.Height)
    c.DrawToBitmap(bmp, New Rectangle(Point.Empty, bmp.Size))
    cur = New Cursor(bmp.GetHicon())
End Sub

Private Sub DragOver(sender As Object, e As DragEventArgs)
    If Cursor.Current <> cur Then Cursor.Current = cur
End Sub  


来源:https://stackoverflow.com/questions/26625217/how-to-draw-control-while-is-moved-in-a-drag-and-drop-event

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!