2011-08-25 123 views
11

我成功開發了用於將文件從Windows資源管理器拖動到列表框的C#代碼。將文件夾從Windows資源管理器拖放到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); 
     } 
    } 

如果我將一個文件夾拖到listBox中,那麼這個文件夾內的所有文件都將被添加到listBox項中。

如果任何人都可以爲我提供上述任務的代碼片段,對我來說將會非常有幫助。

在此先感謝。

回答

12

您的代碼爲DragEnter仍然申請文件夾。

DragDrop事件中,以相同方式檢索文件路徑和文件夾路徑。如果拖動文件和文件夾的組合,它們將全部出現在您的files陣列中。你只需要確定路徑是否是文件夾。

以下代碼將從所有文件夾的根目錄中刪除所有文件的所有路徑,並刪除所有文件的路徑。

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); 
      } 
     } 
    } 

請注意,只有丟棄文件夾根目錄中的文件纔會被收集。如果您需要獲取文件夾樹中的所有文件,則需要執行一些遞歸來收集所有文件。

相關問題