여러 경로의 파일을 사용하는 프로그램 (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와 싸우고있다. 이 논쟁에서 이기지 못할 것입니다. –
두 개의 대화 상자가 서로 다른 폴더에서 열리기 때문에 다른 대화 상자가 여기에서 진행됩니다. 누군가 내가 서브 클래 싱 할 수 있거나이 기능을 가진 오픈 소스 파일 브라우저 클래스를 만들었습니까? – Matt