10

我认为使用应用程序设置可以解决问题,但我没有让它工作。这就是我所拥有的:

private void btnBrowse_Click(object sender, EventArgs e)
        {
            if (fbFolderBrowser.ShowDialog() == DialogResult.OK)
            {
                // I want to open the last folder selected by the user here.
            }

当用户单击此按钮时,我想打开浏览窗口到他访问的最后一个文件夹并保存它。下次他单击该按钮时,它将自动选择该文件夹。

我在想也许我可以使用可以在运行时更改的用户变量,但我没有让它工作。谁能帮我一把?

4

5 回答 5

18

转到设置页面,您创建的项目的项目设计器,然后在应用程序中添加文件夹路径变量。现在添加以下代码以恢复最后选择的文件夹路径。

FolderBrowserDialog folderBrowser = new FolderBrowserDialog();
folderBrowser.Description = "Select a folder to extract to:";
folderBrowser.ShowNewFolderButton = true;
folderBrowser.SelectedPath = Properties.Settings.Default.Folder_Path;
//folderBrowser.SelectedPath = project_name.Properties.Settings.Default.Folder_Path;

if (folderBrowser.ShowDialog() == DialogResult.OK)
{

    if (!String.IsNullOrEmpty(Properties.Settings.Default.Folder_Path))
        Properties.Settings.Default.Folder_Path = folderBrowser.SelectedPath;

    Properties.Settings.Default.Folder_Path = folderBrowser.SelectedPath;
    Properties.Settings.Default.Save();
}
于 2012-10-28T13:56:55.120 回答
4

有两个地方可以找到用户最后访问的文件夹:

  1. Recent Files and Folders: 在这里能找到它:C:\Documents and Settings\USER\Recent
  2. Registry:在注册表中看这里:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU

您可以使用此代码段找到它:

public static string GetLastOpenSaveFile(string extention)
{
    RegistryKey regKey = Registry.CurrentUser;
    string lastUsedFolder = string.Empty;
    regKey = regKey.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU");

    if (string.IsNullOrEmpty(extention))
        extention = "html";

    RegistryKey myKey = regKey.OpenSubKey(extention);

    if (myKey == null && regKey.GetSubKeyNames().Length > 0)
        myKey = regKey.OpenSubKey(regKey.GetSubKeyNames()[regKey.GetSubKeyNames().Length - 2]);

    if (myKey != null)
    {
        string[] names = myKey.GetValueNames();
        if (names != null && names.Length > 0)
        {
            lastUsedFolder = (string)myKey.GetValue(names[names.Length - 2]);
        }
    }

    return lastUsedFolder;
}

或者

在 Windows XP 中,当您在保存文件的目录上按 Save 时SaveFileDialog,将设置为新的当前工作目录(在 中的那个Environment.CurrentDirectory)。

这样,当您重新打开 时FileDialog,它会在与以前相同的目录中打开。

通过设置FileDialog.RestoreDirectory = true,当你关闭FileDialog原来的工作目录时会恢复。

在 Windows Vista/7 中,行为始终为FileDialog.RestoreDirectory = true.

于 2012-08-20T14:25:13.570 回答
2

应用程序设置可以解决问题。
更详细的版本在这里

使用字符串类型的设置

为每个按钮创建一个设置并将路径存储在那里。然后使用设置作为ofd.InitialPath

使用上面的代码示例,试试这个:

在解决方案资源管理器中右键单击您的应用程序名称,单击设置选项卡名称 = Button1Path 类型 = 字符串范围 = 用户

然后使用这个:

private void btnBrowse_Click(object sender, EventArgs e)
{
    fbFolderBrowser.InitialDirectory=this.Settings.Button1Path;
    if (fbFolderBrowser.ShowDialog() == DialogResult.OK)
    {
        // I want to open the last folder selected by the user here.
        this.Settings.Button1Path=fbFolderBrowser.SelectedPath
    }
}
于 2012-08-20T14:32:01.713 回答
0

您可以轻松跟踪上次选择的文件夹,如下所示:

public String LastSelectedFolder;

private void btnBrowse_Click(object sender, EventArgs e)
{
    fbFolderBrowser.InitialDirectory=this.Settings.Button1Path;
    if (fbFolderBrowser.ShowDialog() == DialogResult.OK)
    {
        // Save Last selected folder.
        LastSelectedFolder = fbFolderBrowser.SelectedPath;
    }
}
于 2012-10-11T14:39:27.433 回答
-2

我知道这是一个非常古老的线程,但没有一个答案指向在用户的最后一个位置重新打开文件浏览器的最简单方法。

只需定义 RestoreDirectory = true。检查示例

var fd = new OpenFileDialog
   {
       Filter = @"All Files|*.*",
       RestoreDirectory = true,
       CheckFileExists = true
   };

类 OpenFileDialog api 参考

https://msdn.microsoft.com/en-us/library/system.windows.forms.filedialog.restoredirectory(v=vs.110).aspx

除非我误解了帖子的意图,否则这是迄今为止实现它的最简单方法。但是,如果您确实需要打印最后一个位置,请检查另一个

于 2017-05-01T02:47:39.137 回答