【问题标题】:Drag-drop in vb.net在 vb.net 中拖放
【发布时间】:2016-06-01 20:18:13
【问题描述】:

我是 Visual Basic 的新手,我按照一篇文章编写了这段代码来拖放图像。

但是我想添加一个if语句来控制拖放,所以如果图片1转到图片框2,它会提示它在错误的位置。

我的代码:

Public Class Form1

Private Source As PictureBox = Nothing

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    For Each PB As PictureBox In Me.Controls.OfType(Of PictureBox)()
        PB.AllowDrop = True
        AddHandler PB.MouseMove, AddressOf PBs_MouseMove
        AddHandler PB.DragEnter, AddressOf PBs_DragEnter
        AddHandler PB.DragDrop, AddressOf PBs_DragDrop
        AddHandler PB.DragOver, AddressOf PBs_DragOver
    Next
End Sub

Private Sub PBs_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
    Dim PB As PictureBox = DirectCast(sender, PictureBox)
    If Not IsNothing(PB.Image) AndAlso e.Button = Windows.Forms.MouseButtons.Left Then
        Source = PB
        PB.DoDragDrop(PB.Image, DragDropEffects.Copy Or DragDropEffects.Move)
    End If
End Sub

Private Sub PBs_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs)
    If e.Data.GetDataPresent(DataFormats.Bitmap) Then
        If My.Computer.Keyboard.CtrlKeyDown Then
            e.Effect = DragDropEffects.Copy
        Else
            e.Effect = DragDropEffects.Move
        End If
    Else
        e.Effect = DragDropEffects.None
    End If
End Sub

Private Sub PBs_DragOver(ByVal sender As Object, ByVal e As DragEventArgs)
    If e.Data.GetDataPresent(DataFormats.Bitmap) Then
        If My.Computer.Keyboard.CtrlKeyDown Then
            e.Effect = DragDropEffects.Copy
        Else
            e.Effect = DragDropEffects.Move
        End If
    Else
        e.Effect = DragDropEffects.None
    End If
End Sub

Private Sub PBs_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs)
    Dim PB As PictureBox = DirectCast(sender, PictureBox)
    Dim tmpImage As Image = PB.Image ' store the current image
    PB.Image = e.Data.GetData(DataFormats.Bitmap) ' change it to the dropped image
    If e.Effect = DragDropEffects.Move Then
        If Not (PB Is Source) Then
            Source.Image = tmpImage ' put the stored image in the source picturebox (swap)
        End If
    End If
End Sub

End Class

【问题讨论】:

    标签: vb.net drag-and-drop draggable


    【解决方案1】:

    您可以尝试更改您的 PBs_DragDrop 代码,以检查哪个 PictureBox 像这样被拖放

    Private Sub PBs_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs)
        Dim PB As PictureBox = DirectCast(sender, PictureBox)
        If PB Is PictureBox2 Then
            'handle mistake here
        Else
            Dim tmpImage As Image = PB.Image ' store the current image
            PB.Image = e.Data.GetData(DataFormats.Bitmap) ' change it to the dropped image
            If e.Effect = DragDropEffects.Move Then
                If Not (PB Is Source) Then
                    Source.Image = tmpImage ' put the stored image in the source picturebox (swap)
                End If
            End If
        End If
    End Sub
    

    【讨论】:

    • 如果我要控制4张图片
    猜你喜欢
    • 2011-09-12
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多