繁体   English   中英

如何跟踪用户选择的最后一个文件夹?

[英]How do I keep track of the last folder selected by a user?

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

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.
            }

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

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

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

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();
}

您可以在两个位置找到用户访问的最后一个文件夹:

  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 中,当您在SaveFileDialog上按 Save 时,保存文件的目录将设置为新的当前工作目录( Environment.CurrentDirectory目录)。

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

通过设置FileDialog.RestoreDirectory = true ,当您关闭FileDialog ,原始工作目录将被恢复。

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

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

使用字符串类型的设置

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

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

在解决方案资源管理器中右键单击您的应用程序名称,单击设置选项卡 Name = Button1Path Type = String Scope = User

然后使用这个:

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
    }
}

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

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;
    }
}

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

只需定义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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM