我支持在.NET 3.5上运行的旧版C#应用程序。我们在Windows Vista(32位或64位)上发现了FolderBrowserDialog
的问题。
基本上发生的事情是会出现对话框,但只会显示根桌面节点,甚至无法展开它以显示其他内容。显然,这是不可能的。
经过大量的反复试验后,我最终设法通过设置RootFolder
属性 来完成剩下的设置,从而获得了一些可用的东西:
FolderBrowserDialog browsePath = new FolderBrowserDialog();
browsePath.RootFolder = Environment.SpecialFolder.MyComputer;
browsePath.SelectedPath = this.textBoxTo.Text;
browsePath.Description = TextResources.OutputTargetCaption;
browsePath.ShowNewFolderButton = true;
if(browsePath.ShowDialog(this) == DialogResult.OK)
{
this.textBoxTo.Text = UpdateLocation(browsePath.SelectedPath);
}
这几乎有效;但是,我有一个奇怪的问题,那么SelectedPath
(根据定义textBoxTo
的内容)是当前用户主目录中的路径,它不会自动浏览到该路径,而只是将“我的电脑”节点展开到一个级别。对任何其他道路来说都是完美的。
我确信你的第一个猜测是权限问题,就像我的直觉一样。它似乎不是,这个问题是正常运行的,并且作为管理员,对于标准帐户和管理员帐户都是如此。这是一个干净的安装,当然,没有奇怪的权限或任何东西。
当我们所有的默认值都在当前用户的目录中时,这非常烦人!
注意:此仅在应用程序中发生;就我所见,它不能用小型测试应用程序重现。
关于可能导致这种情况的任何想法?
更新:Screenies:
This is the behaviour I want (obtainted from a little test app)
This is what I get with the default property
This is what I get by setting the root to My Computer
注意:最后一张图片与预期图片设置的SelectedPath
相同...
答案 0 :(得分:1)
我有类似的问题。在Windows Vista和Windows 7中,使用以下代码:
browsePath.RootFolder = Environment.SpecialFolder.MyComputer;
返回桌面。如果查看Windows资源管理器,则树的根目录是桌面,而不是像Windows XP中的“我的电脑”。 要解决此问题,请改用:
browsePath.RootFolder = @"C:\";
每台Windows计算机都有一个C:\驱动器,因此这将解决您的问题。
我希望这会对你有所帮助。
答案 1 :(得分:0)
如果您只访问用户私人文件夹,请使用
browsePath.RootFolder = Environment.SpecialFolder.Personal
只有指定的文件夹及其下方的所有子文件夹才会显示 出现在对话框中并可选择。 SelectedPath属性, 与RootFolder一起,确定所选文件夹的内容 当显示对话框时,只要SelectedPath是一个 绝对路径是RootFolder的子目录(或更准确地说, 指向由shell表示的shell命名空间的子文件夹 RootFolder)。
简而言之,除非RootFolder已在当前用户专用文件夹中,否则您无法将某人的私人文件夹作为启动的selectedPath输入。
有关详细信息,请参阅:http://msdn.microsoft.com/en-us/library/system.windows.forms.folderbrowserdialog.rootfolder.aspx
答案 2 :(得分:0)
VB.NET代码
Dim fdb As New FolderBrowserDialog
With fdb
'.RootFolder = Environment.SpecialFolder.MyComputer
'this folder don't exists in vista, the my computer folder was renamed to computer (in spanish "mi pc" to "equipo")
'try with another initial folder
.RootFolder = Environment.SpecialFolder.Desktop
'You can set the desktop as home directory because users typically already have shortcuts or the left side menu to navigate
Dim dr As DialogResult = .ShowDialog
If _
dr = DialogResult.OK Or _
dr = DialogResult.Yes Then _
If IO.Directory.Exists(.SelectedPath) = True Then _
Me.textBoxTo.Text = UpdateLocation(.SelectedPath)
End With
基本上,尝试另一个目录并确保所选目录存在。 如果你仍然遇到问题,可能是因为系统出现了一些问题。