私はいくつかの異なるパスからファイルを使用しているプログラム(C#、.Net 4.5、WPF)を持っています。ユーザーがそのファイルタイプの場所を参照できるように、それぞれのOpenFileDialogを、最後に使用されたディレクトリとは別に追跡することを期待してインスタンス化しました。openfiledialogsの干渉とディレクトリが残る
//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;
}
これは断続的に機能するようです。ときには、あるファイルダイアログ(wordFileDlg)からファイルを選択すると、次に別のファイルダイアログ(excelFileDlg)を開くときに、そのディレクトリがwordFileDlgの最後に選択されたディレクトリに変更されました。それ以外の方法は真実ではありません。それはなぜでしょうか?
初期ディレクトリプロパティをデフォルト値に設定しましたが、最後のディレクトリでもセッション間で永続するようです。私はrestoreDirectoryプロパティをfalseに設定しました。プログラムを開き、いくつかのファイルを参照してプログラムを閉じます。私はプログラムを再び開き、ブラウズでは私を最初のディレクトリに移動させず、最後に選択したディレクトリに戻します。どのように知っていますか?ファイルダイアログを特定のディレクトリに開く方法が見つからないようです。 RestoreDirectoryをtrueとfalseの両方に設定しようとしました。
どのようにして異なるファイルダイアログを自分のディレクトリを覚えていても、セッション間で持続しないようにすることができますか?
できません。同じ場所から次のファイルを開きたいと思っているOSと戦っている。あなたはこの議論に勝つことはできません。 –
2つのダイアログが別々のフォルダで開きますので、ここで何か別のダイアログが表示されます。誰かが私がサブクラス化できる、またはこの機能を持つオープンソースのファイルブラウザクラスを作ったことがありますか? – Matt