2011-08-25 9 views
11

Sono riuscito a sviluppare il codice C# per i file di trascinamento da Windows Explorer a ListBox.Trascinare e rilasciare una cartella da Windows Explorer a listBox in C#

// Drag and Drop Files to Listbox 
    private void listBox1_DragEnter(object sender, DragEventArgs e) 
    { 
     if (e.Data.GetDataPresent(DataFormats.FileDrop, false)) 
      e.Effect = DragDropEffects.All; 
     else 
      e.Effect = DragDropEffects.None; 
    } 

    private void listBox1_DragDrop(object sender, DragEventArgs e) 
    { 
     string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false); 
     foreach (string fileName in files) 
     { 
      listBox1.Items.Add(fileName); 
     } 
    } 

Se trascino una cartella per la casella di riepilogo, tutti i file che si trovano all'interno della cartella da aggiungere agli elementi ListBox.

Sarebbe molto utile per me se qualcuno mi può fornire lo snippet di codice per l'attività di cui sopra.

Grazie in anticipo.

risposta

2

se fileName è una directory è possibile creare un oggetto DirectoryInfo e scorrere tutti i file (e le sottodirectory)

si può avere uno sguardo a questo codice:

http://weblogs.asp.net/israelio/archive/2004/06/23/162913.aspx

(non avete bisogno di utilizzare un oggetto DirectoryInfo, è anche possibile utilizzare i metodi statici della classe Directory

12

il codice per DragEnter ancora si applica per le cartelle.

Nell'evento DragDrop, si recuperano percorsi di file e percorsi di cartella nello stesso modo. Se si trascinano combinazioni di file e cartelle, verranno visualizzate tutte nell'array files. Hai solo bisogno di determinare se i percorsi sono o meno cartelle.

Il codice seguente recupererà tutti i percorsi di tutti i file dalla radice di tutte le cartelle eliminate e i percorsi di tutti i file eliminati.

private void listBox1_DragDrop(object sender, DragEventArgs e) 
    { 
     List<string> filepaths = new List<string>(); 
     foreach (var s in (string[])e.Data.GetData(DataFormats.FileDrop, false)) 
     { 
      if (Directory.Exists(s)) 
      { 
       //Add files from folder 
       filepaths.AddRange(Directory.GetFiles(s)); 
      } 
      else 
      { 
       //Add filepath 
       filepaths.Add(s); 
      } 
     } 
    } 

Si noti che verranno raccolti solo i file nella cartella principale delle cartelle. Se è necessario recuperare tutti i file nell'albero delle cartelle, è necessario eseguire un po 'di ricorsione per raccoglierli tutti.