奇怪的FolderBrowserDialog行为

时间:2012-04-02 08:27:30

标签: c# .net winforms windows-vista folderbrowserdialog

我支持在.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相同...

3 个答案:

答案 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

基本上,尝试另一个目录并确保所选目录存在。 如果你仍然遇到问题,可能是因为系统出现了一些问题。