设置文件夹浏览器对话框开始位

时间:2009-05-10 00:31:05

标签: c#

有没有办法将文件夹浏览器对话框的初始目录设置为非特殊文件夹?这就是我目前正在使用的

fdbLocation.RootFolder = Environment.SpecialFolder.Desktop;
但是我想使用我存储在字符串中的路径
fdbLocation.RootFolder = myFolder;
这导致错误“无法将'字符串'转换为' System.Environment.SpecialFolder'”。

7 个答案:

答案 0 :(得分:171)

在调用ShowDialog之前设置SelectedPath属性。

fdbLocation.SelectedPath = myFolder;

答案 1 :(得分:27)

在调用ShowDialog ...

之前设置SelectedPath属性
folderBrowserDialog1.SelectedPath = @"c:\temp\";
folderBrowserDialog1.ShowDialog();

将在C:\ Temp

启动它们

答案 2 :(得分:24)

fldrDialog.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
  

“如果在显示对话框之前设置了SelectedPath属性,则具有此路径的文件夹将是所选文件夹,只要SelectedPath设置为RootFolder的子文件夹的绝对路径(或更准确地说,指向由RootFolder表示的shell命名空间的子文件夹。“

MSDN - SelectedPath

  

“GetFolderPath方法返回与此枚举关联的位置。这些文件夹的位置在不同的操作系统上可以具有不同的值,用户可以更改某些位置,并且位置已本地化。”

Re:桌面与DesktopDirectory

<强>桌面

  

“逻辑桌面而不是物理文件系统位置。”

<强> DesktopDirectory:

  

“用于物理的目录   在桌面上存储文件对象。做   不要混淆这个目录   桌面文件夹本身,这是一个   虚拟文件夹。“

MSDN - Special Folder Enum

MSDN - GetFolderPath

答案 3 :(得分:9)

设置目录选择路径并检索新目录:

dlgBrowseForLogDirectory.SelectedPath = m_LogDirectory;
if (dlgBrowseForLogDirectory.ShowDialog() == DialogResult.OK)
{
     txtLogDirectory.Text = dlgBrowseForLogDirectory.SelectedPath;
}

答案 4 :(得分:0)

dotnet-snippets.de上找到

通过反射,它可以工作并设置真正的RootFolder!

using System;
using System.Reflection;
using System.Windows.Forms;

namespace YourNamespace
{
    public class RootFolderBrowserDialog
    {

        #region Public Properties

        /// <summary>
        ///   The description of the dialog.
        /// </summary>
        public string Description { get; set; } = "Chose folder...";

        /// <summary>
        ///   The ROOT path!
        /// </summary>
        public string RootPath { get; set; } = "";

        /// <summary>
        ///   The SelectedPath. Here is no initialization possible.
        /// </summary>
        public string SelectedPath { get; private set; } = "";

        #endregion Public Properties

        #region Public Methods

        /// <summary>
        ///   Shows the dialog...
        /// </summary>
        /// <returns>OK, if the user selected a folder or Cancel, if no folder is selected.</returns>
        public DialogResult ShowDialog()
        {
            var shellType = Type.GetTypeFromProgID("Shell.Application");
            var shell = Activator.CreateInstance(shellType);
            var folder = shellType.InvokeMember(
                             "BrowseForFolder", BindingFlags.InvokeMethod, null,
                             shell, new object[] { 0, Description, 0, RootPath, });
            if (folder is null)
            {
                return DialogResult.Cancel;
            }
            else
            {
                var folderSelf = folder.GetType().InvokeMember(
                                     "Self", BindingFlags.GetProperty, null,
                                     folder, null);
                SelectedPath = folderSelf.GetType().InvokeMember(
                                   "Path", BindingFlags.GetProperty, null,
                                   folderSelf, null) as string;
                // maybe ensure that SelectedPath is set
                return DialogResult.OK;
            }
        }

        #endregion Public Methods

    }
}

答案 5 :(得分:0)

就我而言,这是一次意外的两次转义。

这有效:

SelectedPath = @"C:\Program Files\My Company\My product";

这不是:

SelectedPath = @"C:\\Program Files\\My Company\\My product";

答案 6 :(得分:0)

这很简单,你不需要反思。您必须将 SelectedPath 属性设置为所需的文件夹,但是,因为 SelectedPath 之前仅设置为作为 RootFolder 子文件夹的绝对路径,因此您必须设置 RootFolder。例如:

您的初始文件夹是桌面子文件夹:

dlgBrowseForLogDirectory.RootFolder = Environment.SpecialFolder.DesktopDirectory;
dlgBrowseForLogDirectory.SelectedPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "yourDesktopFolder");

您的初始文件夹是一个普通文件夹(我的电脑子文件夹也是如此):

dlgBrowseForLogDirectory.RootFolder = Environment.SpecialFolder.MyComputer;
dlgBrowseForLogDirectory.SelectedPath = @"e:\yourFolder";

有很好的编码, 克劳迪奥