我支持C#应用程序的旧版本,运行在.NET 3.5上。我们发现了Windows上的FolderBrowserDialog ( 32位或64位)的问题。
基本上,会出现对话框,但只显示根桌面节点,甚至无法展开它来显示其他任何内容。显然,这是不可能使用的。
经过大量的尝试和错误之后,我最终成功地获得了一些有用的东西,方法是在设置的其余部分的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的内容)是当前用户主目录中的路径,它不会自动浏览到该路径,而只是显示我的计算机节点扩展到一个级别。对于任何其他的道路来说都是非常好的。
我相信你的第一个猜测将是一个权限问题,就像我的直觉一样。这似乎不是,这个问题发生在正常运行,并且作为管理员,对标准帐户和管理员帐户。这是一个干净的安装,当然,没有奇怪的权限或任何东西。
当我们所有的缺省值都在当前用户的目录中时,这是非常烦人的!
注意:据我所见,只在应用程序中才会发生这种情况;就我所见,小型测试应用程序是不可复制的。
有什么可能导致这一切的想法吗?
更新:屏幕:
这就是我想要的行为(从一个小测试应用程序中获得)
这就是我使用默认属性得到的结果。
这就是我通过将根目录设置到我的计算机而得到的结果。注意:最后一幅图像与预期的图像具有相同的SelectedPath集.
发布于 2012-11-29 13:01:24
我也有过类似的问题。在Windows和Windows 7中,有以下代码:
browsePath.RootFolder = Environment.SpecialFolder.MyComputer;返回桌面。如果您在Windows Explorer中查看,树的根是桌面,而不是我的计算机,就像Windows XP中的那样。要解决这个问题,请使用以下方法:
browsePath.RootFolder = @"C:\";每台Windows计算机都有一个C:\驱动器,因此这将解决您的问题。
希望这能帮到你。
发布于 2012-04-03 08:01:38
如果您只访问用户专用文件夹,请使用
browsePath.RootFolder = Environment.SpecialFolder.Personal只有指定的文件夹和下面的任何子文件夹才会出现在对话框中,并且是可选择的。SelectedPath属性和RootFolder确定对话框显示时所选文件夹是什么,只要SelectedPath是RootFolder的子文件夹(或者更准确地说,指向由RootFolder表示的shell名称空间的子文件夹)。
简而言之,除非selectedPath已经在当前用户私有文件夹中,否则不能将某人的私有文件夹作为启动RootFolder输入。
有关详细信息,请参阅:http://msdn.microsoft.com/en-us/library/system.windows.forms.folderbrowserdialog.rootfolder.aspx
发布于 2012-04-21 20:45:10
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基本上,尝试另一个目录并确保所选目录的存在。如果你仍然有问题,可能是由于系统的一些错误。
https://stackoverflow.com/questions/9973083
复制相似问题