Dor*_*ork 1 c# openfiledialog folderbrowserdialog
在我的应用程序同时使用OpenFileDialog和FolderBrowserDialog按钮单击处理程序:
var fileDialog = new System.Windows.Forms.OpenFileDialog();
var folderDialog = new System.Windows.Forms.FolderBrowserDialog();
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当调用OpenFileDialog它从上次选择文件的文件夹中的资源管理器中启动时.但FolderBrowserDialog无论上次选择哪个文件夹,每次都在浏览器中打开MyComputer.如何为"FolderBrowserDialog"获得相同的行为(记住上次选择的文件夹)?
'OpenFileDialog'存储最后选择文件的文件夹也很有趣?Windows是否为每个应用程序存储它?
您可以在打开之前FolderBrowserDialog使用SelectedPath属性设置所选文件夹:
var folderDialog = new System.Windows.Forms.FolderBrowserDialog();
folderDialog.RootFolder = System.Environment.SpecialFolder.MyComputer;
folderDialog.SelectedPath = <variable_where_you_stored_the_last_path>;
Run Code Online (Sandbox Code Playgroud)
例如:
private string _lastFolderDialog = null;
// ...
var folderDialog = new System.Windows.Forms.FolderBrowserDialog();
folderDialog.SelectedPath = _lastFolderDialog;
if(folderDialog.ShowDialog() == DialogResult.OK)
{
_lastFolderDialog = folderDialog.SelectedPath;
}
Run Code Online (Sandbox Code Playgroud)
至于OpenFileDialog,我认为你的意思是:
fileDialog.InitialDirectory =
Environment.GetFolderPath(System.Environment.SpecialFolder.MyComputer);
Run Code Online (Sandbox Code Playgroud)
然而,这将无法工作,因为MyComputer没有路径.试试这个:
fileDialog.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"
Run Code Online (Sandbox Code Playgroud)
您可以在注册表中检查其他CLSID HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID
正如您已经发现的那样,如果InitialDirectory设置为null,它将记住最后打开的文件夹.这不会发生FolderBrowserDialog,虽然
所有这一切,正如我在评论中所说,FolderBrowserDialog它已经过时了,你根本不应该使用它.根据支持它的本机API()的MSDNSHBrowseForFolder:
对于Windows Vista或更高版本,建议您将IFileDialog与FOS_PICKFOLDERS选项一起使用,而不是使用SHBrowseForFolder函数.这在选择文件夹模式下使用"打开文件"对话框,是首选实现.
您可能要检查这个问题(这反过来链接到这个网页)或本其他问题上如何实现IFileDialog与FOS_PICKFOLDERS.NET中