martes, 16 de marzo de 2010

Drag Drop de archivos

Ejemplo en visual basic.Net que hace un Drag Drop de archivos desde Windows hacia un formulario , y las rutas se agregan en un control ListBox, usando la propiedad AllowDrop para habilitar el arrastre , y los eventos DragEnter y DragDrop del control de lista para detectar el drag drop e insertar los datos


Controles
  • Un ListBox : lstFile
  • Un PictureBox : Picturebox1
Código fuente

Option Explicit On
Option Strict On

' para usar la clase Path
Imports System.IO

Public Class Form1
'evento DragDrop del ListBox
Private Sub ListBox1_DragDrop(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DragEventArgs) Handles lstFile.DragDrop

Try
' Obtener un array de Strings con los archivos que se están colocando
Dim Rutas As String() = DirectCast( e.Data.GetData(DataFormats.FileDrop),String())

' Recorrer el array
For Each ruta As String In Rutas
' obtiene la extensión del path
Dim extension As String = Path.GetExtension(ruta).ToLower

' si no es un direcotorio lo agrega a la lista
If extension.Length > 0 Then

' Si es de esta extensión de archivo lo agrega
If extension = ".png" Or extension = ".jpg" Or extension = ".bmp" Or _
extension = ".ico" Or extension = ".wmf" Or extension = ".jpeg" Or _
extension = ".gif" Then

' Verifica si ya no se agregó este elemento
If lstFile.Items.Contains(ruta) = False Then
lstFile.Items.Add(ruta)
End If
End If
End If
Next
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
'evento DragEnter del ListBox
Private Sub ListBox1_DragEnter(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DragEventArgs) _
Handles lstFile.DragEnter

e.Effect = DragDropEffects.Copy
End Sub

' Cargar la imagen en el Picturebox
Private Sub lstDir_SelectedIndexChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles lstFile.SelectedIndexChanged

Try
' Leer el archivo con Image.FromFile
PictureBox1.Image = Image.FromFile(lstFile.Text)
' error
Catch ex As Exception
MsgBox(ex.ToString)
End Try

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
' Poner AllowDrop en true para habilitar el arrastre de datos hacia el control
lstFile.AllowDrop = True
End Sub
End Class

No hay comentarios:

Publicar un comentario