martes, 6 de marzo de 2012

Drag & Drop (Arrastrar y Soltar) de controles PictureBox en VB.NET

Continuando con lo que había empezado les dejo un ejemplo de arrastrar una imagen de un PictureBox a otro.

Para esto agregamos dos de los controles mencionados a un formulario y les cambiamos las propiedades en tiempo de diseño de BorderStyle a FixedSingle y SizeMode a StretchImage y copiamos el siguiente código dentro de la clase Form1:

    Private blnBotonPresionado As Boolean

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Habilitamos el arrastre para el control PictureBox2 (No lo tiene permitido en tiempo de diseño)
        PictureBox2.AllowDrop = True
        'Cargamos la imagen en el primer control que se encuentra dentro de la carpeta del programa
        PictureBox1.Load("Puesta de sol.jpg")
    End Sub

    Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        'Verificamos si se presionó el botón izquierdo del mouse.
        If e.Button = Windows.Forms.MouseButtons.Left Then
            'Si existe o hay una imagen en el control
            If Not PictureBox1.Image Is Nothing Then
                'Determinamos que el botón se encuentra presionado.
                blnBotonPresionado = True
            End If
        End If
    End Sub

    Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        If blnBotonPresionado Then
            'Iniciamos el arrastre y permitimos que se pueda copiar o mover la imagen.
            PictureBox1.DoDragDrop(PictureBox1.Image, DragDropEffects.Copy Or DragDropEffects.Move)
        End If
        blnBotonPresionado = False
    End Sub

    Private Sub PictureBox2_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles PictureBox2.DragEnter
        If e.Data.GetDataPresent(DataFormats.Bitmap) Then
            'Verificamos la tecla control. 
            If e.KeyState = 9 Then
                e.Effect = DragDropEffects.Copy
            Else
                e.Effect = DragDropEffects.Move
            End If
        Else
            e.Effect = DragDropEffects.None
        End If
    End Sub

    Private Sub PictureBox2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles PictureBox2.DragDrop
        'Asignamos la imagen al control PictureBox2.
        PictureBox2.Image = e.Data.GetData(DataFormats.Bitmap)
        'Si la tecla control no está presionada, borramos la fuente de la imagen.
        If Not e.KeyState = 8 Then
            PictureBox1.Image = Nothing
        End If
    End Sub

Una vez escrito el código anterior, lo ejecutamos y lo probamos arrastrando la imagen izquieda hasta el control de la derecha.

No hay comentarios:

Publicar un comentario