簡體   English   中英

如何記住 FolderBrowserDialog 中最后選擇的文件夾?

[英]How to remember the last selected folder in FolderBrowserDialog?

我在我的應用程序中使用FolderBrowserDialog 。通過它的構造函數,我可以設置RootPathSelectedPath 它應該始終以D:\Export\ 目錄作為默認路徑打開。 如果用戶選擇任何其他路徑,新選擇的目錄應反映在文件夾中。SelectedPath變量也如果用戶關閉對話框 window 並再次打開它,它應該打開上次選擇的文件夾(用戶選擇的文件夾)。 它不應打開默認文件夾 (D:\Export)。

public void OpenFolderDialog()
{
FolderBrowserDialog folder = new FolderBrowserDialog(Environment.SpecialFolder.MyComputer, @"D:\Export");
folder.ShowDialog();

    if(!string.IsNullOrEmpty(folderBrowserDialog.SelectedPath) && Directory.Exists(folderBrowserDialog.SelectedPath))
    {
        ExportData(folderBrowserDialog.SelectedPath);
    }
    else
    {
        if (string.IsNullOrEmpty(folderBrowserDialog.SelectedPath))
        {
          log.WarningMsg("FolderBrowserDialog selected path is empty");
         }
         else
         {
           log.WarningMsg("FolderBrowserDialog selected Directory Does not exist");
         }
      }
 }

注意:folderBrowserDialog.SelectedPath 是只讀屬性。 我們無法在其中分配任何值。

我們如何記住最后選擇的文件夾路徑?

您可以在ShowDialog()方法返回后立即將SelectedPath屬性的值存儲在變量中:

private string _selectedPath = @"D:\Export\"; // <-- the default value
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
    FolderBrowserDialog dialog = new FolderBrowserDialog()
    {
        SelectedPath = _selectedPath
    };
    dialog.ShowDialog();
    _selectedPath = dialog.SelectedPath;
}

如果要使用System.Windows.Forms.FolderBrowserDialog ,則必須將SelectedPath值存儲在字段或屬性中,然后在再次調用ShowDialog之前將SelectedPath設置回該值(如mm8 的答案所示)。

但老實說,我不會為此煩惱。 對我來說,真正的答案是根本不使用FolderBrowserDialog 從用戶的角度來看,該對話框非常不友好。 正如對問題如何使用 OpenFileDialog 到 select 文件夾回答中所建議的那樣? ,我也推薦使用Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog It's part of a Microsoft NuGet package that can be found here: https://www.nuget.org/packages/Microsoft.WindowsAPICodePack-Shell .

此對話框會自動執行您嘗試執行的操作:它會記住用戶選擇的最后一個文件夾,並在下次用戶打開對話框時從該文件夾開始 - 不需要額外的代碼。

示例用法:

var dialog = new Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog { IsFolderPicker = true };
if (dialog.ShowDialog() == Microsoft.WindowsAPICodePack.Dialogs.CommonFileDialogResult.Ok)
{
    string selected = dialog.FileName;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM