26

在 C# .NET 3.5 应用程序(WinForms 和 WPF 的混合)中,我想让用户选择一个文件夹以从中导入大量数据。目前,它正在使用,System.Windows.Forms.FolderBrowserDialog但这有点蹩脚。主要是因为您无法在其中键入路径(因此您需要映射网络驱动器,而不是键入 UNC 路径)。

我想要更像System.Windows.Forms.OpenFileDialog, 但用于文件夹而不是文件的东西。

我可以用什么代替?WinForms 或 WPF 解决方案很好,但如果可以避免的话,我不希望 PInvoke 进入 Windows API。

4

4 回答 4

36

不要自己创建!它已经完成了。您可以使用FolderBrowserDialogEx - 内置 FolderBrowserDialog 的可重用衍生产品。这个允许您输入路径,甚至是 UNC 路径。您还可以使用它浏览计算机或打印机。就像内置的 FBD 一样工作,但是……更好。

完整的源代码。自由。MS-公共许可证。

FolderBrowserDialogEx

使用它的代码:

var dlg1 = new Ionic.Utils.FolderBrowserDialogEx();
dlg1.Description = "Select a folder to extract to:";
dlg1.ShowNewFolderButton = true;
dlg1.ShowEditBox = true;
//dlg1.NewStyle = false;
dlg1.SelectedPath = txtExtractDirectory.Text;
dlg1.ShowFullPathInEditBox = true;
dlg1.RootFolder = System.Environment.SpecialFolder.MyComputer;

// Show the FolderBrowserDialog.
DialogResult result = dlg1.ShowDialog();
if (result == DialogResult.OK)
{
    txtExtractDirectory.Text = dlg1.SelectedPath;
}
于 2009-03-09T04:55:47.160 回答
1

不幸的是,除了 FolderBrowserDialog 之外没有用于文件夹选择的对话框。您需要自己创建此对话框或使用 PInvoke。

于 2008-09-05T15:08:53.737 回答
0

到目前为止,由于对我的相同问题缺乏回应,我认为答案是从头开始滚动您自己的对话。

我在这里和那里看到了关于从 VB6 继承常见对话框的事情,我认为这可能是解决方案的一部分,但我从未见过任何关于修改对话框认为它正在选择的内容。可以通过 .NET 通过 PInvoke 和其他一些技巧,但我还没有看到可以做到这一点的代码。

知道这是可能的,而且它不是特定于 Vista 的,因为 Visual Studio 从 VS 2003 开始​​就已经做到了。

这里希望有人回答你或我的!

于 2008-09-05T16:08:56.027 回答
0

经过数小时搜索类似解决方案后,我找到了leetNightShade工作解决方案的回答

我相信有三件事使这个解决方案比其他所有解决方案都好得多。

  1. 使用简单。 它只需要您在项目中包含两个文件(无论如何都可以合并为一个)。
  2. 在 XP 或更旧的系统上使用时,它会退回到标准的FolderBrowserDialog 。
  3. 作者允许将代码用于您认为合适的任何目的。

    没有许可证,您可以随意获取和使用代码。

在此处下载代码。

于 2013-06-09T15:04:19.723 回答