Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Forms.OpenFileDialog()和Forms.FolderBrowserDialog()初始路径行为_C#_Openfiledialog_Folderbrowserdialog - Fatal编程技术网

C# Forms.OpenFileDialog()和Forms.FolderBrowserDialog()初始路径行为

C# Forms.OpenFileDialog()和Forms.FolderBrowserDialog()初始路径行为,c#,openfiledialog,folderbrowserdialog,C#,Openfiledialog,Folderbrowserdialog,在我的应用程序中,我使用按钮单击处理程序上的OpenFileDialog和FolderBrowserDialog: var fileDialog = new System.Windows.Forms.OpenFileDialog(); var folderDialog = new System.Windows.Forms.FolderBrowserDialog(); 奇怪的是,当调用OpenFileDialog时,它从上次选择文件的文件夹在资源管理器中启动。 但是无论上次选择了哪个文件夹,每

在我的应用程序中,我使用按钮单击处理程序上的
OpenFileDialog
FolderBrowserDialog

var fileDialog = new System.Windows.Forms.OpenFileDialog();

var folderDialog = new System.Windows.Forms.FolderBrowserDialog();
奇怪的是,当调用
OpenFileDialog
时,它从上次选择文件的文件夹在资源管理器中启动。 但是无论上次选择了哪个文件夹,每次都会在资源管理器中打开我的计算机。“FolderBrowserDialog”如何获得相同的行为(记住上次选择的文件夹)


“OpenFileDialog”在哪里存储最后选择的文件的文件夹也很有趣?windows是否为每个应用程序存储它?

在打开之前,您可以使用
SelectedPath
属性设置
FolderBrowserDialog
的选定文件夹:

var folderDialog = new System.Windows.Forms.FolderBrowserDialog();
folderDialog.RootFolder = System.Environment.SpecialFolder.MyComputer;
folderDialog.SelectedPath = <variable_where_you_stored_the_last_path>;
至于
OpenFileDialog
,我想你的意思是:

fileDialog.InitialDirectory =
               Environment.GetFolderPath(System.Environment.SpecialFolder.MyComputer);
但是,这不起作用,因为我的计算机没有路径。请尝试以下方法:

fileDialog.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"
您可以在注册表中的
HKEY\U CURRENT\U USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID

正如您已经发现的,如果
InitialDirectory
设置为
null
,它将记住上次打开的文件夹。但是,使用
FolderBrowserDialog
不会发生这种情况


综上所述,正如我在评论中所说的,
FolderBrowserDialog
已经过时了,您根本不应该使用它。根据支持它的本机API(
SHBrowseForFolder
)的:

对于Windows Vista或更高版本,建议将IFileDialog与FOS_PICKFOLDERS选项一起使用,而不是使用SHBrowseForFolder功能。这在“拾取文件夹”模式下使用“打开文件”对话框,是首选实现


您可能需要检查(哪些链接到)或如何使用.NET中的
FOS\u PICKFOLDERS
实现
IFileDialog
,打开之前,您可以使用
SelectedPath
属性设置
文件夹浏览器对话框的选定文件夹:

var folderDialog = new System.Windows.Forms.FolderBrowserDialog();
folderDialog.RootFolder = System.Environment.SpecialFolder.MyComputer;
folderDialog.SelectedPath = <variable_where_you_stored_the_last_path>;
至于
OpenFileDialog
,我想你的意思是:

fileDialog.InitialDirectory =
               Environment.GetFolderPath(System.Environment.SpecialFolder.MyComputer);
但是,这不起作用,因为我的计算机没有路径。请尝试以下方法:

fileDialog.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"
您可以在注册表中的
HKEY\U CURRENT\U USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID

正如您已经发现的,如果
InitialDirectory
设置为
null
,它将记住上次打开的文件夹。但是,使用
FolderBrowserDialog
不会发生这种情况


综上所述,正如我在评论中所说的,
FolderBrowserDialog
已经过时了,您根本不应该使用它。根据支持它的本机API(
SHBrowseForFolder
)的:

对于Windows Vista或更高版本,建议将IFileDialog与FOS_PICKFOLDERS选项一起使用,而不是使用SHBrowseForFolder功能。这在“拾取文件夹”模式下使用“打开文件”对话框,是首选实现


您可能希望检查(哪些链接)或如何使用.NET中的
FOS\u PICKFOLDERS
实现
IFileDialog

请注意,OpenFileDialog中InitialDirectory的设置是错误的。这应该是实际路径,而不是转换为StringDirectory的枚举请注意,OpenFileDialog中InitialDirectory的设置是错误的。这应该是一个实际的路径,而不是一个转换为StringFileDialog的枚举-我删除了第二行,默认情况下,它可以按我想要的方式工作(记住最后一个目录)。如何让folderDialog以同样的方式工作?@Dork存储
folderDialog的结果。在调用
ShowDialog()
后选择路径
,然后在再次调用
ShowDialog
之前进行设置。我认为FolderBrowser对话框本身并没有做到这一点。。我认为他们有相同的天性,应该工作similarly@Dork不,不是真的<代码>OpenFileDialog
在Win32 API中比文件夹
要早得多(文件夹浏览器对话框
就是用它制作的)。我不确定是否有
FOS_PICKFOLDERS
的本机实现,但这就是您应该使用的:
FolderBrowserDialog
已过时,Microsoft不建议使用它(自Vista启用以来),尽管许多应用程序仍在使用它(尽管它是一个糟糕的对话框),请检查(和接受的答案):这是在Vista或更高版本的fileDialog中浏览文件夹的首选方法-我删除了第二行,默认情况下它可以按我的需要工作(记住最后一个目录)。如何让folderDialog以同样的方式工作?@Dork存储
folderDialog的结果。在调用
ShowDialog()
后选择路径
,然后在再次调用
ShowDialog
之前进行设置。我认为FolderBrowser对话框本身并没有做到这一点。。我认为他们有相同的天性,应该工作similarly@Dork不,不是真的<代码>OpenFileDialog
在Win32 API中比文件夹
要早得多(文件夹浏览器对话框就是用它制作的)。我不确定是否有
FOS_PICKFOLDERS
的本机实现,但这就是您应该使用的:
FolderBrowserDialog
已过时,Microsoft不建议使用它(自Vista启用以来),尽管许多应用程序仍在使用它(尽管它是一个糟糕的对话框),请检查(和接受的答案):这是在Vista或更高版本中浏览文件夹的首选方法