关于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以来就做到了。

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


    推荐阅读

      linux命令创建用户组?

      linux命令创建用户组?,系统,代码,密码,用户组,用户,命令,信息,名称,新增,管

      查看linux用户命令行?

      查看linux用户命令行?,信息,系统,时间,名称,密码,用户,命令,地址,状态,设备,L

      linux所有用户命令行?

      linux所有用户命令行?,系统,信息,地址,工作,密码,命令,用户,时间,电脑,管理,L

      linux看用户信息命令?

      linux看用户信息命令?,系统,密码,信息,状态,软件,情况,命令,用户,网络,时间,l

      linux下删除用户命令?

      linux下删除用户命令?,系统,代码,邮箱,用户组,命令,用户,名称,管理,电脑,账

      用户id的linux命令?

      用户id的linux命令?,系统,密码,信息,联系方式,地址,位置,用户,命令,用户名,

      linux混合gc命令?

      linux混合gc命令?,代码,环境,情况,软件,档案,状态,网上,标准,服务,分析,64位

      linux删除用户组命令?

      linux删除用户组命令?,管理,系统,密码,电脑,名称,用户,用户组,名字,信息,工

      linux下用户权限命令?

      linux下用户权限命令?,管理,系统,密码,地址,权限,时间,基础,信息,基本知识,

      linux登陆用户命令?

      linux登陆用户命令?,系统,工具,信息,地址,软件,工作,命令,数字,服务,名称,Lin

      linux用户名改名命令?

      linux用户名改名命令?,系统,密码,命令,代码,名称,用户名,用户,终端,主机名,

      linux用户分组命令?

      linux用户分组命令?,系统,命令,电脑,信息,时间,标准,资料,用户,文件,用户组,L

      linux命令改用户所属?

      linux命令改用户所属?,系统,文件,名称,用户组,命令,用户,名录,基本知识,所

      linux系统用户组命令?

      linux系统用户组命令?,系统,管理,密码,代码,用户组,用户,命令,邮箱,电脑,名

      linux用户管理的命令?

      linux用户管理的命令?,系统,管理,信息,地址,工作,用户,单位,基础,数据,命令,L

      linux用户退出命令行?

      linux用户退出命令行?,状态,档案,标准,系统,命令,文件,模式,编辑,指令,主机,l

      linux用户自定义命令?

      linux用户自定义命令?,系统,时间,标准,软件,项目,电脑,服务,工具,基本知识,

      linux用户组命令设置?

      linux用户组命令设置?,管理,系统,密码,代码,电脑,用户组,用户,软件,新增,命

      linux进入用户命令行?

      linux进入用户命令行?,系统,地址,工作,服务,信息,命令,首页,电脑,密码,终端,L

      linux用户用不了命令?

      linux用户用不了命令?,系统,档案,不了,命令,网络,密码,信息,情况,用户,权限,l