![](/img/trans.png)
[英]How can I save and load the last selected folder by user with FolderBrowserDialog?
[英]How to remember the last selected folder in FolderBrowserDialog?
我在我的應用程序中使用FolderBrowserDialog 。通過它的構造函數,我可以設置RootPath , SelectedPath 。 它應該始終以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.