使用.NET 3.5选择文件夹

时间:2020-03-05 18:48:16  来源:igfitidea点击:

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

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

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

解决方案

回答

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

回答

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

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

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

希望有人回答我们或者我的回答!

回答

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

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

使用它的代码:

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