首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在拖放事件中移动时绘制控件

如何在拖放事件中移动时绘制控件
EN

Stack Overflow用户
提问于 2014-10-29 15:56:03
回答 1查看 1.8K关注 0票数 1

在Vb.net中,通过拖放事件将控件(按钮)从一个面板移动到另一个面板。

当被光标移动时,有没有办法或选项来绘制控件(按钮)?现在,我只需要更改光标形状,当拖放操作完成时,控件就会绘制在它的新面板父级中。

提前谢谢。

编辑:添加代码

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-04 05:26:12

您必须在MouseDown事件上创建一个bmp/光标。然后,在GiveFeedback事件中,您必须禁用UseDefaultCursors,以便在他们移动鼠标时,它不会立即更改回默认光标。然后,在DragOver事件中,将cursor对象(在MouseDown中创建)设置为当前光标。如果当前光标以某种方式重置为另一个光标,这也将用于重新应用您的自定义光标。如果您将光标从指定的拖动区域移出,并且光标变成了"can't drop it here“图标,就会发生这种情况。

您必须设置这些Subs来处理相应控件上的相应事件。另外,在设置位图时,"c“是需要绘制的控件。这可能是发送者,也可能不是发送者,这取决于您的情况,因此,您可以决定在此时绘制哪个控件。

代码语言:javascript
复制
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  
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26625217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档