在我的应用程序中,我在按钮点击处理程序上同时使用OpenFileDialog
和FolderBrowserDialog
:
var fileDialog = new System.Windows.Forms.OpenFileDialog();
var folderDialog = new System.Windows.Forms.FolderBrowserDialog();
奇怪的是,当调用OpenFileDialog
时,它会从上次选择文件的文件夹中的资源管理器中启动。
但无论上次选择哪个文件夹,FolderBrowserDialog
每次都会在资源管理器中打开MyComputer。如何为“FolderBrowserDialog'”获得相同的行为(记住最后选择的文件夹)?
在OpenFileDialog' OpenFileDialog'存储最后选择的文件的文件夹? Windows是否为每个应用程序存储它?
答案 0 :(得分:5)
您可以在打开前使用FolderBrowserDialog
属性设置SelectedPath
所选文件夹:
var folderDialog = new System.Windows.Forms.FolderBrowserDialog();
folderDialog.RootFolder = System.Environment.SpecialFolder.MyComputer;
folderDialog.SelectedPath = <variable_where_you_stored_the_last_path>;
例如:
private string _lastFolderDialog = null;
// ...
var folderDialog = new System.Windows.Forms.FolderBrowserDialog();
folderDialog.SelectedPath = _lastFolderDialog;
if(folderDialog.ShowDialog() == DialogResult.OK)
{
_lastFolderDialog = folderDialog.SelectedPath;
}
对于OpenFileDialog
,我认为你的意思是:
fileDialog.InitialDirectory =
Environment.GetFolderPath(System.Environment.SpecialFolder.MyComputer);
然而,由于MyComputer
没有路径,因此无法工作。试试这个:
fileDialog.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"
您可以在HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID
正如您已经发现的,如果InitialDirectory
设置为null
,它会记住上次打开的文件夹。 FolderBrowserDialog
虽然
所有这一切,正如我在评论中所说,FolderBrowserDialog
已经过时,你根本不应该使用它。根据支持它的原生API(SHBrowseForFolder
)的MSDN:
对于Windows Vista或更高版本,建议您将IFileDialog与FOS_PICKFOLDERS选项一起使用,而不是使用SHBrowseForFolder函数。这在选择文件夹模式下使用“打开文件”对话框,是首选实现。
您可能需要检查this question(反过来链接到this page)或this other question,了解如何在.NET中使用IFileDialog
实现FOS_PICKFOLDERS
< / p>