miércoles, 7 de marzo de 2012

Drag & Drop (Arrastrar y Soltar) de un archivo de imagen a un PictureBox en VB.NET

Ahora les mostraré lo sencillo que resulta crear la funcionalidad de arrastrar un archivo de imagen desde cualquier carpeta a un control PictureBox de nuestra aplicación, para lo cual necesitaremos agregar un control PictureBox a un formulario, luego ajustar las siguientes propiedades de la siguiente forma:

BorderStyle = FixedSingle
SizeMode = StretchImage

y escribir el siguiente código.

    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
    End Sub

    Private Sub PictureBox2_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles PictureBox2.DragEnter
        'DataFormats.FileDrop nos devuelve el array de rutas de archivos
        If e.Data.GetDataPresent(DataFormats.FileDrop) Then
            'Los archivos son externos a nuestra aplicación por lo que de indicaremos All ya que dará lo mismo.
            e.Effect = DragDropEffects.All
        End If
    End Sub

    Private Sub PictureBox2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles PictureBox2.DragDrop
        If e.Data.GetDataPresent(DataFormats.FileDrop) Then
            Dim strRutaArchivoImagen As String
            Dim i As Integer
            'Asignamos la primera posición del array de ruta de archivos a la variable de tipo string
            'declarada anteriormente ya que en este caso sólo mostraremos una imagen en el control.
            strRutaArchivoImagen = e.Data.GetData(DataFormats.FileDrop)(0)
            'La cargamos al control
            PictureBox2.Load(strRutaArchivoImagen)
        End If
    End Sub

Y esto es todo =)

2 comentarios:

  1. Muchas gracias por la información.

    Con unos pocos cambios he conseguido que me funcione para cargar archivos de texto .TXT arrastrándolos hasta el TextBox.

    Adjunto el código:

    Imports System.IO
    Imports System.Text

    Public Class Form1

    Private Sub TextBox1_DragDrop(sender As Object, e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    Dim strRutaArchivoTexto As String
    Dim i As Integer
    'Asignamos la primera posición del array de ruta de archivos a la variable de tipo string
    'declarada anteriormente ya que en este caso sólo mostraremos una imagen en el control.
    strRutaArchivoTexto = e.Data.GetData(DataFormats.FileDrop)(0)
    If LCase(Mid(strRutaArchivoTexto, Len(strRutaArchivoTexto) - 4 + 1)) = ".txt" Then
    Dim sr As New System.IO.StreamReader(strRutaArchivoTexto, Encoding.Default)
    TextBox1.AppendText(sr.ReadToEnd)
    'MessageBox.Show(sr.ReadToEnd)
    sr.Close()
    End If
    End If
    End Sub

    Private Sub TextBox1_DragEnter(sender As Object, e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter
    'DataFormats.FileDrop nos devuelve el array de rutas de archivos
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    'Los archivos son externos a nuestra aplicación por lo que de indicaremos All ya que dará lo mismo.
    e.Effect = DragDropEffects.All
    End If
    End Sub

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    TextBox1.AllowDrop = True
    End Sub

    End Class

    ResponderEliminar