Странное поведение FolderBrowserDialog - PullRequest
8 голосов
/ 02 апреля 2012

Я поддерживаю старую версию приложения C #, работающего на .NET 3.5. Мы обнаружили проблему с 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, что и для ожидаемого ...

Ответы [ 3 ]

1 голос
/ 29 ноября 2012

У меня была похожая проблема.В Windows Vista и Windows 7 следующий код:

browsePath.RootFolder = Environment.SpecialFolder.MyComputer;

возвращает рабочий стол.Если вы посмотрите в проводнике Windows, корень дерева будет Desktop, а не My Computer, как это было в Windows XP.Чтобы решить эту проблему, используйте вместо этого:

browsePath.RootFolder = @"C:\";

На каждом компьютере Windows есть диск C: \, так что это решит вашу проблему.

Надеюсь, это поможет вам.

0 голосов
/ 22 апреля 2012

код 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

, попробуйте другой каталог и убедитесь, что выбранный каталог существует.если у вас все еще есть проблемы, возможно, это связано с какой-то ошибкой в ​​системе.

0 голосов
/ 03 апреля 2012

Если вы обращаетесь только к личным папкам пользователей, используйте

browsePath.RootFolder = Environment.SpecialFolder.Personal

Только указанная папка и все подпапки, которые находятся под ней, появятся в диалоговом окне и будут доступны для выбора.Свойство SelectedPath вместе с RootFolder определяет, какой будет выбранная папка при отображении диалогового окна, если SelectedPath является абсолютным путем, который является подпапкой RootFolder (или, точнее, указывает на подпапку представленного пространства имен оболочки).by RootFolder).

Короче говоря, вы не можете вводить кому-то личную папку в качестве запуска selectedPath, если RootFolder уже не находится в личной папке текущего пользователя.

Подробнее см. http://msdn.microsoft.com/en-us/library/system.windows.forms.folderbrowserdialog.rootfolder.aspx

...