Sandro Bizioli


Chi sogna di giorno conosce molte cose che sfuggono a chi sogna soltanto di notte. (E.A.Poe)
Home Blogs | Home | Login | Contact | My Profile | RSS | About | Cerca

Drag & Drop di un file in VB.Net

Attraverso il Drag & Drop (trascina e lascia) è possibile, con un semplice movimento del mouse, caricare all'interno di un programma un file specifico.Ad esempio se trascino un file di testo sulla finestra di NotePad, lo vedrò caricarsi proprio come se lo avessi fatto dal menù file->apri Implementare questa funzionalità in un nostro applicativo VB.Net, potrebbe non essere proprio così immediato.Vediamo passo a passo come procedere. Per comodità supponiamo di voler trascinare un file di  
Leggi tutto il post...
Categoria: VB.Net
venerdì, 07 dic 2007 Ore. 13.44

Scrivi un commento

Nome:
Blog:
E-Mail:
(l'indirizzo e-mail non verrà pubblicato, consente di essere avvertiti quando arrivano nuovi commenti a questo Post)
Codice:
Corpo:
Cookie:

Commenti

Autore: SSUPERPIPPOInviato il: 17 feb 2008 - 11.59
Ciao, ho letto il tuo interessante articolo.
Io sto realizzando un'applicazione che prevede il drag & drop di file (e fin qui nessun problema), e di mail da Outlook (non express). E proprio in quest'ultima operazione che ho riscontrato dei problemi.
Leggendo qui e lì ho trovato qualche ispirazione e ho scritto questo codice associato all'evento dragdrop per intercettare la mail:

If (e.Data.GetDataPresent(DataFormats.FileDrop, False) = True) Then
fileNames = CType(e.Data.GetData(DataFormats.FileDrop), String())

' Cicla i files oggetto del trascinamento
For Each fileName As String In fileNames
CaricaFile(fileName)
Next
ElseIf e.Data.GetDataPresent("FileGroupDescriptor") Then

' 1. Ottiene FileGroupDescriptor e ne estrae il nome file

Dim theStream As Stream = CType(e.Data.GetData("FileGroupDescriptor"), Stream)
Dim fileGroupDescriptor() As Byte = New Byte((512) - 1) {}

theStream.Read(fileGroupDescriptor, 0, 512)

' recupera il nome file

Dim fileName As StringBuilder = New StringBuilder("")

Dim i As Integer = 76
Do While (fileGroupDescriptor(i) <> 0)
fileName.Append(Convert.ToChar(fileGroupDescriptor(i)))
i = (i + 1)
Loop

theStream.Close()

Dim path As String = Application.StartupPath

' Crea il percorso completo per il file nella directory di programma (temporaneamente)
Dim theFile As String = (path + "\" + fileName.ToString)

' 2. Recuperare e il file dalla memoria E QUI C'E' IL PROBLEMA!!!!
'
Dim ms As MemoryStream = CType(e.Data.GetData("FileContents", True), MemoryStream)
Dim fileBytes() As Byte = New Byte((ms.Length) - 1) {}
ms.Position = 0
ms.Read(fileBytes, 0, CType(ms.Length, Integer))

' Crea il file e salva il raw zip file su di esso
Dim fs As FileStream = New FileStream(theFile, FileMode.Create)
fs.Write(fileBytes, 0, CType(fileBytes.Length, Integer))
fs.Close()

Dim tempFile As FileInfo = New FileInfo(theFile)
If (tempFile.Exists = True) Then
tempFile.Delete()
Else
Trace.WriteLine("Impossibile creare il file!")
End If
End If

Funziona tutto, il problema (decisamente bloccante) è che questa istruzione:

Dim ms As MemoryStream = CType(e.Data.GetData("FileContents", True), MemoryStream)

mi valorizza ms sempre a Nothing!

Hai per caso avuto modo di affrantare questa problematica? hai qualche dritta da darmi? Ti ringrazio molto.

Alessandro
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003