在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-公共许可证。
使用它的代码:
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以来就做到了。
希望有人回答您或我的回答!