【问题标题】:C# - How to customize OpenFileDialog to select multiple folders and files?C# - 如何自定义 OpenFileDialog 以选择多个文件夹和文件?
【发布时间】: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 实现了文件夹浏览器对话框

标签: c# openfiledialog


【解决方案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 不能同时作为文件浏览器和文件夹浏览器。对于第三方工具,您有两种选择,例如您找到的第二个让您自己控制的工具。令人惊讶的是,您可能会发现创建自己的控件的非常简单版本并不困难。

【讨论】:

猜你喜欢
  • 2013-09-21
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多