在Vb.net中,通过拖放事件将控件(按钮)从一个面板移动到另一个面板。
当被光标移动时,有没有办法或选项来绘制控件(按钮)?现在,我只需要更改光标形状,当拖放操作完成时,控件就会绘制在它的新面板父级中。
提前谢谢。
编辑:添加代码
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
发布于 2018-12-04 05:26:12
您必须在MouseDown事件上创建一个bmp/光标。然后,在GiveFeedback事件中,您必须禁用UseDefaultCursors,以便在他们移动鼠标时,它不会立即更改回默认光标。然后,在DragOver事件中,将cursor对象(在MouseDown中创建)设置为当前光标。如果当前光标以某种方式重置为另一个光标,这也将用于重新应用您的自定义光标。如果您将光标从指定的拖动区域移出,并且光标变成了"can't drop it here“图标,就会发生这种情况。
您必须设置这些Subs来处理相应控件上的相应事件。另外,在设置位图时,"c“是需要绘制的控件。这可能是发送者,也可能不是发送者,这取决于您的情况,因此,您可以决定在此时绘制哪个控件。
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
复制相似问题