Appunti di Programmazione

Creative Commons License

Drag and Drop con VB .Net

Volete fare in modo che nella vostra applicazione sia utilizzabile l'opzione di Drag and Drop? Potete fare qualcosa di simile:

In un progetto Windows Form ho aggiunto un panel e 3 PictureBox. Il Panel l'ho lasciato vuoto e nelle PictureBox ho inserito 3 immagini distinte.

Drag and Drop

Public Class Form1

    'array di PictureBox
    Private pbx() As PictureBox
    'indice dell'array
    Private indice As Integer = 0
    'posizione del mouse
    Private posizione As New Point

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        'si abilita il Panel a ricevere controlli con il DRAG & Drop
        Panel1.AllowDrop = True

    End Sub

    Private Sub PictureBox_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
    Handles PictureBox1.MouseMove, PictureBox2.MouseMove, PictureBox3.MouseMove

        'si recupera la posizione del puntatore del mouse rispetto alla PictureBox scelta
        posizione = sender.PointToClient(MousePosition)

    End Sub

    Private Sub PictureBox_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
    Handles PictureBox1.MouseDown, PictureBox2.MouseDown, PictureBox3.MouseDown

        'consente di iniziare un'operazione di trascinamento, con relativa copia, del contenuto della PictureBox scelta
        sender.DoDragDrop(sender.Image, DragDropEffects.Copy)

    End Sub

    Private Sub Panel1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) _
    Handles Panel1.DragEnter

        'si abilita l'effetto copia
        e.Effect = DragDropEffects.Copy

    End Sub

    Private Sub Panel1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) _
    Handles Panel1.DragDrop

        'si re-inizializza il numero di elementi della matrice
        ReDim Preserve pbx(indice)

        'si istanzia uno nuova PictureBox
        pbx(indice) = New PictureBox
        'Le si assegna un nome,...
        pbx(indice).Name = "immagine" & indice.ToString
        '... una posizione,...
        pbx(indice).Location = Panel1.PointToClient(MousePosition - posizione)
        'si recupera l'immagine trascinata e la si inserisce nella Picturebox
        pbx(indice).Image = e.Data.GetData(DataFormats.Bitmap)
        'si imposta la dimensione...
        pbx(indice).Size = New Size(70, 60)
        '... e la modalità di ridimensionamento
        pbx(indice).SizeMode = PictureBoxSizeMode.Zoom

        'si aggiunge la PictureBox al Panel1
        Me.Panel1.Controls.Add(pbx(indice))

        'si incrementa l'indice che tiene conto delle caselle immagini create
        indice += 1

    End Sub

End Class