簡體   English   中英

將文件夾從Windows資源管理器拖放到C#中的listBox

[英]Drag and Drop a Folder from Windows Explorer to listBox in C#

我成功地開發了用於將文件從Windows資源管理器拖動到listBox的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項目中。

如果有人能為我提供上述任務的代碼片段,對我來說會非常有幫助。

提前致謝。

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

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

如果fileName是一個目錄,你可以創建一個DirectoryInfo對象並循環遍歷所有文件(和子目錄)

你可以看看這段代碼:

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

(您不需要使用DirectoryInfo對象,您也可以使用Directory類中的靜態方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM