Ich habe ein Programm (C#,. NET 4.5, WPF), die Dateien aus mehreren verschiedenen Pfaden verwendet. Um es dem Benutzer zu ermöglichen, zu dem Ort für diesen Dateityp zu navigieren, instanziierte ich für jeden einen anderen OpenFileDialog in der Hoffnung, dass jeder getrennt nach seinem zuletzt verwendeten Verzeichnis suchen würde.Openfiledialogs stören und Verzeichnisse persistent
//Class variables
OpenFileDialog wordFileDlg = new OpenFileDialog();
OpenFileDialog excelFileDlg = new OpenFileDialog();
Dictionary<FILETYPES, OpenFileDialog> fdialogs = new Dictionary<FILETYPES, OpenFileDialog>();
//from Main
wordFileDlg.FilterIndex = 2;
wordFileDlg.RestoreDirectory = true;
wordFileDlg.Title = "Choose Word Document Template";
wordFileDlg.Filter = "All files (*.docx)|*.docx";
excelFileDlg.FilterIndex = 2;
excelFileDlg.RestoreDirectory = true;
excelFileDlg.Title = "Choose Excel or XML Data File";
excelFileDlg.Filter = "All files (*.xls*;*.xml)|*.xls*;*.xml";
wordFileDlg.InitialDirectory = @"d:\downloads-tmp\";
excelFileDlg.InitialDirectory = @"D:\Document\Spreadsheets";
fdialogs[FILETYPES.WORD] = wordFileDlg;
fdialogs[FILETYPES.EXCEL] = excelFileDlg;
//... End Main
private string browseForFile(FILETYPES filetype, out string result)
{
Trace.WriteLine("Using OpenFileDialog with initial dir = " + fdialogs[filetype].InitialDirectory);
DialogResult dr;
dr = fdialogs[filetype].ShowDialog();
result = dr.ToString();
Trace.WriteLine("Dialog result dr= " + dr.ToString()+", type of dr = ");
if (!dr.ToString().Equals("Cancel"))
{
clearWarning();
}
return fdialogs[filetype].FileName;
}
Dies scheint intermittierend zu arbeiten. Manchmal, wenn ich eine Datei aus einem Dateidialog (wordFileDlg) auswähle, wird beim nächsten Öffnen des anderen Dateidialogs (excelFileDlg) das Verzeichnis in das zuletzt ausgewählte Verzeichnis von wordFileDlg geändert. Andersherum ist nicht wahr. Warum sollte es das tun?
Ich setze die anfängliche Verzeichniseigenschaft auf einen Standardwert, aber selbst das letzte Verzeichnis scheint über Sitzungen hinweg zu bestehen. Ich setze die Eigenschaft restoreDirectory auf false Ich öffne das Programm, suche nach einigen Dateien und schließe das Programm. Ich öffne das Programm erneut und das Durchsuchen führt mich nicht zum ursprünglichen Verzeichnis, sondern zurück zum zuletzt ausgewählten Verzeichnis. Wie weiß es das überhaupt? Ich finde keinen Weg, den Dateidialog zu einem bestimmten Verzeichnis zu öffnen. Ich habe versucht, RestoreDirectory auf true und false zu setzen.
Wie kann ich verschiedene Dateidialoge haben, erinnere mich an ihre eigenen Verzeichnisse und NICHT über Sitzungen bestehen, und kann ich das Verzeichnis, das es öffnet, festlegen?
Sie können nicht. Sie kämpfen mit dem Betriebssystem, das davon ausgehen möchte, dass der Benutzer die nächste Datei vom selben Ort aus öffnen möchte. Sie werden dieses Argument nicht gewinnen. –
Die beiden Dialoge öffnen sich in verschiedenen Ordnern, also läuft hier noch etwas anderes. Hat jemand eine Open-Source-Dateibrowser-Klasse erstellt, die ich unterklassifizieren kann oder die diese Funktionalität hat? – Matt