使用.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; }