8

我支持在 .NET 3.5 上运行的旧版 C# 应用程序。我们FolderBrowserDialog在 Windows Vista(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)是当前用户主目录中的路径,它不会自动浏览到该路径,而只是显示“我的电脑”节点扩展为一个等级。对于任何其他路径来说都很好。

我敢肯定,您的第一个猜测是权限问题,就像我的直觉一样。似乎不是,对于标准帐户和管理员帐户,此问题以管理员身份正常运行。这是一个全新的安装,当然,没有奇怪的权限或任何东西。

当我们所有的默认值都在当前用户的目录中时,这非常烦人!

注意:这只发生在应用程序中;据我所见,它无法通过小型测试应用程序重现。

关于可能导致这种情况的任何想法?

更新: Screenies:
这是我想要的行为(从一个小测试应用程序获得)
这是我使用默认属性得到的
这是通过将根设置为我的电脑得到的 注意:最后一张图像的SelectedPath设置与预期的图像...

4

3 回答 3

1

我有一个类似的问题。在 Windows Vista 和 Windows 7 中,以下代码:

browsePath.RootFolder = Environment.SpecialFolder.MyComputer;

返回桌面。如果您在 Windows 资源管理器中查看,树的根是桌面,而不是 Windows XP 中的“我的电脑”。要解决此问题,请改用:

browsePath.RootFolder = @"C:\";

每台 Windows 计算机都有一个 C:\ 驱动器,因此这将解决您的问题。

我希望这可以帮助你。

于 2012-11-29T13:01:24.697 回答
0

如果您只访问用户的私人文件夹,请使用

browsePath.RootFolder = Environment.SpecialFolder.Personal

只有指定的文件夹及其下的任何子文件夹才会出现在对话框中并且可以选择。SelectedPath 属性与 RootFolder 一起确定显示对话框时选定的文件夹是什么,只要 SelectedPath 是作为 RootFolder 的子文件夹的绝对路径(或更准确地说,指向所表示的 shell 命名空间的子文件夹通过根文件夹)。

简而言之,除非 RootFolder 已经在当前用户的私人文件夹中,否则您不能输入某人的私人文件夹作为启动 selectedPath。

有关详细信息,请参阅:http: //msdn.microsoft.com/en-us/library/system.windows.forms.folderbrowserdialog.rootfolder.aspx

于 2012-04-03T08:01:38.293 回答
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

基本上,尝试另一个目录并确保所选目录存在。如果您仍然遇到问题,可能是由于系统中的某些故障。

于 2012-04-21T20:45:10.323 回答