在C#.NET 3.5应用程序(WinForms和WPF的混合)中,我想让用户选择一个文件夹来从中导入大量数据。目前,它正在使用System.Windows.Forms.FolderBrowserDialog
,但这有点蹩脚。主要是因为您无法在其中键入路径(因此您需要映射网络驱动器,而不是键入UNC路径)。
我想要的更像System.Windows.Forms.OpenFileDialog
,但对于文件夹而不是文件。
我可以用什么代替? WinForms或WPF解决方案很好,但如果可以避免的话,我不希望将PInvoke引入Windows API。
答案 0 :(得分:36)
不要自己创建!它已经完成了。你可以使用FolderBrowserDialogEx - 内置FolderBrowserDialog的可重用衍生物。这个允许您输入路径,甚至是UNC路径。您还可以使用它浏览计算机或打印机。就像内置的FBD一样,但是......更好。
完整源代码。自由。 MS-Public许可证。
使用它的代码:
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;
}
答案 1 :(得分:1)
不幸的是,除了FolderBrowserDialog之外,没有用于文件夹选择的对话框。您需要自己创建此对话框或使用PInvoke。
答案 2 :(得分:0)
到目前为止,基于对my identical question的回复不足,我假设答案是从头开始滚动你自己的对话框。
我已经在这里和那里看到了关于从VB6继承常见对话框的内容,我认为这可能是解决方案的一部分,但我从未见过有关修改对话框认为它正在选择的内容的任何内容。通过PInvoke和其他一些技巧可以通过.NET实现,但我还没有看到代码可以实现它。
我知道它是可能的并且它不是特定于Vista的,因为自从VS 2003以来Visual Studio已经完成了它。
希望有人能回答你或我的回答!
答案 3 :(得分:0)
在搜索类似解决方案数小时后,我发现this answer leetNightShade到a working solution。
我相信有三件事情可以让这个解决方案比其他所有解决方案都好。
没有许可证,因为您可以自由地接受代码并按照您的意愿行事。
下载代码here。