【问题标题】:Drag and Drop a Folder from Windows Explorer to listBox in C#将文件夹从 Windows 资源管理器拖放到 C# 中的 listBox
【发布时间】:2011-08-25 11:44:56
【问题描述】:

我成功开发了用于将文件从 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 项中。

如果有人可以为我提供上述任务的代码 sn-p,对我将非常有帮助。

提前致谢。

【问题讨论】:

    标签: c# drag-and-drop directory listboxitems


    【解决方案1】:

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

    请注意,只会收集删除文件夹根目录中的文件。如果你需要获取文件夹树中的所有文件,你需要做一些递归来收集它们。

    【讨论】:

      【解决方案2】:

      如果fileName 是一个目录,您可以创建一个DirectoryInfo 对象并遍历所有文件(和子目录)

      你可以看看这段代码:

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

      (您不需要使用DirectoryInfo 对象,也可以使用Directory 类中的静态方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-26
        • 2011-06-19
        相关资源
        最近更新 更多