关于c#:使用.NET 3.5选择文件夹

Choosing a folder with .NET 3.5

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

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

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


不要自己创建它!已经做完了您可以使用FolderBrowserDialogEx-
内置FolderBrowserDialog的可重用派生类。这使您可以键入一个路径,甚至是UNC路径。您也可以使用它浏览计算机或打印机。就像内置的FBD一样工作,但是更好。

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

FolderBrowserDialogEx

使用它的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
}

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


经过数小时的搜索,我找到了由leetNightShade找到的可行解决方案的答案。

我认为有三件事可以使此解决方案比其他所有解决方案好得多。

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

    There’s no license as such as you are free to take and do with the code what you will.

  • 在此处下载代码。


    到目前为止,基于对相同问题的回答缺乏,我认为答案是从头开始创建自己的对话框。

    我到处都看到过有关从VB6继承普通对话框的事情,我认为这可能是解决方案的一部分,但我从未见过有关修改对话框以为所选择内容的任何信息。可以通过.NET通过PInvoke和其他一些技巧来实现,但是我还没有看到实现它的代码。

    我知道这是可能的,并且它不是特定于Vista的,因为Visual Studio自VS 2003以来就做到了。

    希望有人回答您或我的回答!


    推荐阅读