C# - 如何自定义 OpenFileDialog 以选择多个文件夹和文件?

Posted

技术标签:

【中文标题】C# - 如何自定义 OpenFileDialog 以选择多个文件夹和文件?【英文标题】:C# - How to customize OpenFileDialog to select multiple folders and files? 【发布时间】:2012-07-22 14:28:35 【问题描述】:

我已发布 - How to use OpenFileDialog to select a folder?,我找不到正确答案。 所以,我改变了我的问题。

我想自定义 OpenFileDialog 以选择多个文件夹和文件。我试图找到一个解决方案,并且可以看到一些关于它的帖子。

我从网上找到了以下项目-https://github.com/scottwis/OpenFileOrFolderDialog。

但是,在使用它时,我遇到了一个问题。它使用 MFC 中的 GetOpenFileName 函数和 OPENFILENAME 结构。 OPENFILENAME 有一个名为“templateID”的成员。 它是对话框模板的标识符。示例项目包含“res1.rc”文件,其中还包含模板对话框。

但我不知道如何将此文件附加到我的 C# 项目中?

或者有没有其他完美的解决方案——“如何自定义OpenFileDialog选择多个文件夹和文件?”?

【问题讨论】:

要下载已停用的 WindowsAPICodePack 的 source,其中包括一些答案中提到的 CommonOpenFileDialog,请参阅Boltclock's answer here。 ... 在该下载中,CommonOpenFileDialog 类位于项目 Shell / CommonFileDialogs / CommonOpenFileDialog.cs 中。注意:需要 Windows Vista 或更高版本。 查看 Ookii Dialogs 实现了文件夹浏览器对话框 【参考方案1】:

如果您使用 FileNames 属性而不是 FileName 属性,您将获得每个选定文件的字符串数组,您可以使用 shift 键选择多个文件。像这样:

private void button1_Click(object sender, EventArgs e)

    OpenFileDialog x = new OpenFileDialog();
    x.Multiselect = true;
    x.ShowDialog();
    string[] result = x.FileNames;

    foreach (string y in result)
       MessageBox.Show(y, "Selected Item", MessageBoxButtons.OK, MessageBoxIcon.Information);

对于需要使用WinAPI 中包含的CommonOpenFileDialog 的文件和文件夹,特定的类是here。

【讨论】:

您需要将OpenFileDialogMultiselect 属性设置为true 才能工作:) 您是否忘记了“多个文件夹和文件”?我也想选择文件夹。 我认为您需要改用 CommonOpenFileDialog,但它应该以相同的方式工作,我会尽快更新我的答案 CommonOpenFileDialog 并没有真正解决这个问题,因为它允许选择多个文件夹或选择多个文件,但不能同时选择两者(取决于 IsFolderPicker 属性)。但是,是否可以以对话框更灵活的方式设置属性,即允许用户同时选择文件和文件夹?对于我正在编写的某种上传工具,我需要它,并且用户应该能够选择他认为需要上传的任何内容......【参考方案2】:

试试这个:

openFileDialog.Multiselect = true;

【讨论】:

您是否忘记了“多个文件夹和文件”?我也想选择文件夹。 不幸的是,它不适用于文件夹。当 Multiselect 为真时,您可以尝试选择多个文件夹 - 但是当您单击“打开”时,它不会返回所选文件夹,它只是导航到第一个所选文件夹,并在其中显示文件。使用过滤器测试All files|*.*【参考方案3】:

您可能无法获得这样的内置 .Net 控件。绝对 OpenFileDialog 不能同时作为文件浏览器和文件夹浏览器。对于第三方工具,您有两种选择,例如您找到的第二个让您自己控制的工具。令人惊讶的是,您可能会发现创建自己的控件的非常简单版本并不困难。

【讨论】:

谢谢。你有什么推荐的第三方工具吗? 我从来没有用过...从来不需要...但是看看这些链接..ssware.com/fldrview.htm 和codeproject.com/Articles/44914/…

以上是关于C# - 如何自定义 OpenFileDialog 以选择多个文件夹和文件?的主要内容,如果未能解决你的问题,请参考以下文章

c# winform 如何实现选择另一台电脑上目录下的文件??

C# - 如何在 OpenFileDialog 中允许多种文件类型?

c# 使用Openfiledialog的问题

C# Winforms - 尝试通过将 FileDialogPermission 添加到 AppDomainSetup 来显示 OpenFileDialog

c#中openfiledialog打开文件的问题

C# 如何处理 OpenFileDialog 文件