选择.NET 3.5的文件夹

时间:2008-09-05 15:01:29

标签: c# .net wpf winforms

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

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

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

4 个答案:

答案 0 :(得分:36)

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

完整源代码。自由。 MS-Public许可证。

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;
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

到目前为止,基于对my identical question的回复不足,我假设答案是从头开始滚动你自己的对话框。

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

知道它是可能的并且它不是特定于Vista的,因为自从VS 2003以来Visual Studio已经完成了它。

希望有人能回答你或我的回答!

答案 3 :(得分:0)

在搜索类似解决方案数小时后,我发现this answer leetNightShadea working solution

我相信有三件事情可以让这个解决方案比其他所有解决方案都好。

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

    没有许可证,因为您可以自由地接受代码并按照您的意愿行事。

  4. 下载代码here