[.net] 폴더를 선택하도록 OpenFileDialog를 어떻게 구성합니까?

VS .NET에서는 프로젝트 폴더를 선택할 때 OpenFileDialog 또는 SaveFileDialog처럼 보이는 대화 상자가 표시되지만 폴더 만 허용하도록 설정되어 있습니다. 이것을 본 이후로 어떻게되는지 알고 싶었습니다. FolderBrowserDialog에 대해 알고 있지만 실제로는이 대화 상자를 좋아하지 않았습니다. 너무 작게 시작하여 경로를 입력 할 수 있다는 이점을 얻지 못했습니다.

나는 지금까지 .NET에서 이것을 할 수있는 방법이 없다고 확신하지만 관리되지 않는 코드에서도 어떻게하는지 궁금합니다. 대화 상자를 처음부터 완전히 다시 구현하지 못하는 경우이 동작을 갖도록 대화 상자를 어떻게 수정합니까?

또한 FolderBrowserDialog에 대해 알고 있지만 때로는이 방법으로 대화 상자를 구성하는 방법에 대해 정말로 궁금한 것 외에도 사용하고 싶지 않습니다. FolderBrowserDialog 만 사용하면 일관된 UI 환경을 유지하는 데 도움이되지만 호기심을 만족시키지 않으므로 답변으로 계산되지 않습니다.

비스타 고유의 것도 아닙니다. VS .NET 2003 이후 로이 대화 상자를 보았으므로 Win2k 및 WinXP에서 가능합니다. 이것은 “이 작업을 수행하는 올바른 방법을 알고 싶습니다”라는 질문이 아니라 “VS 2003에서 처음 사용하고 싶었 기 때문에 궁금했습니다.” Vista의 파일 대화 상자에는이 옵션이 있지만 XP에서 작동하므로 작동하도록 하기 위해 무언가 를 했다는 것을 알고 있습니다. Vista는 질문과 관련하여 존재하지 않기 때문에 Vista 관련 답변은 답변이 아닙니다.

업데이트 :이 작업 샘플을 제공하기 때문에 나는 스콧 위스 니 스키의 답변을 받아들이는거야,하지만 난 방탄복 대화 문화를 가리키는에 대한 크레딧을받을 권리가 생각 (.NET에서 인정 하듯이 불쾌한 인 있지만 않습니다 MS를 알아내는 그것을 위해 일을)와 마크 랜섬 아마도이 작업에 대한 사용자 정의 대화 상자를 굴 렀을 것입니다.



답변

폴더 나 파일을 열 수있는 OpenFileOrFolder 대화 상자라는 대화 상자가 있습니다.

AcceptFiles 값을 false로 설정하면 수락 폴더 모드에서만 작동합니다.

GitHub에서 소스를 다운로드 할 수 있습니다.


답변

내장 된 FolderBrowserDialog의 재사용 가능한 파생물 인 FolderBrowserDialogEx 를 사용할 수 있습니다 . 이를 통해 경로, 심지어 UNC 경로를 입력 할 수 있습니다. 컴퓨터 나 프린터를 찾아 볼 수도 있습니다. 내장 FBD와 똑같이 작동하지만 … 더 좋습니다.

(편집 :이 대화 상자에서 파일이나 폴더를 선택하도록 설정할 수 있음을 지적해야합니다.)

전체 소스 코드 (한 개의 짧은 C # 모듈) 비어 있는. MS- 공개 라이센스.

그것을 사용하는 코드 :

var dlg1 = new Ionic.Utils.FolderBrowserDialogEx();
dlg1.Description = "Select a folder to extract to:";
dlg1.ShowNewFolderButton = true;
dlg1.ShowEditBox = true;
//dlg1.NewStyle = false;
dlg1.SelectedPath = txtExtractDirectory.Text;
dlg1.ShowFullPathInEditBox = true;
dlg1.RootFolder = System.Environment.SpecialFolder.MyComputer;

// Show the FolderBrowserDialog.
DialogResult result = dlg1.ShowDialog();
if (result == DialogResult.OK)
{
    txtExtractDirectory.Text = dlg1.SelectedPath;
}


답변

Windows API 코드 팩이 있습니다. 네임 스페이스 의 CommonOpenFileDialog클래스를 포함하여 많은 셸 관련 항목이 Microsoft.WindowsAPICodePack.Dialogs있습니다. 이것은 완벽한 솔루션입니다-폴더 만 표시되는 일반적인 열린 대화 상자.

사용 방법의 예는 다음과 같습니다.

CommonOpenFileDialog cofd = new CommonOpenFileDialog();
cofd.IsFolderPicker = true;
cofd.ShowDialog();

불행히도 Microsoft는 더 이상이 패키지를 제공하지 않지만 몇몇 사람들은 바이너리를 공식적으로 NuGet에 업로드했습니다. 여기 에서 하나의 예를 찾을 수 있습니다 . 이 패키지는 단지 쉘 전용입니다. 필요한 경우 동일한 사용자에게 원래 패키지에 더 많은 기능을 제공하는 다른 여러 패키지가 있습니다.


답변

Ookii.Dialogs의 패키지는 브라우저 대화 폴더에 새로운 (비스타 스타일) 주위에 관리되는 래퍼가 포함되어 있습니다. 이전 운영 체제에서도 정상적으로 저하됩니다.


답변

이를 위해 FolderBrowserDialog를 사용하는 것이 좋습니다.

using (FolderBrowserDialog dlg = new FolderBrowserDialog())
{
    dlg.Description = "Select a folder";
    if (dlg.ShowDialog() == DialogResult.OK)
    {
        MessageBox.Show("You selected: " + dlg.SelectedPath);
    }
}


답변

몇 시간 동안 검색 한 후 leetNightShade가이 솔루션에 대한 해결책찾았 습니다 .

이 솔루션을 다른 솔루션보다 훨씬 우수하게 만드는 세 가지가 있습니다.

  1. 사용하기 간단합니다.
    프로젝트에 두 개의 파일 만 포함하면됩니다 (어쨌든 하나로 결합 할 수 있음).
  2. XP 또는 이전 시스템에서 사용 하면 표준 FolderBrowserDialog로 돌아갑니다 .
  3. 저자는 귀하가 적합하다고 생각하는 목적으로 코드를 사용할 수있는 권한을 부여합니다.

    코드를 자유롭게 사용하고 수행 할 수있는 라이센스는 없습니다.

여기 에서 코드를 다운로드 하십시오 .


답변

정확한 오디오 복사 는 Windows XP에서이 방식으로 작동합니다. 표준 파일 열기 대화 상자가 표시되지만 파일 이름 필드에 “파일 이름은 무시됩니다”라는 텍스트가 포함됩니다.

여기서 추측하지만, 대화 상자가 크게 변경 될 때마다 문자열이 콤보 상자 편집 컨트롤에 주입되는 것 같습니다. 필드가 비어 있지 않고 대화 상자 플래그가 파일의 존재를 확인하지 않도록 설정되어 있으면 대화 상자를 정상적으로 닫을 수 있습니다.

편집 : 이것은 생각보다 훨씬 쉽습니다. C ++ / MFC의 코드는 다음과 같습니다. 원하는 환경으로 변환 할 수 있습니다.

CFileDialog dlg(true, NULL, "Filename will be ignored", OFN_HIDEREADONLY | OFN_NOVALIDATE | OFN_PATHMUSTEXIST | OFN_READONLY, NULL, this);
dlg.DoModal();

편집 2 : 이것은 C #으로의 번역이어야하지만 C #에 능숙하지 않으므로 작동하지 않으면 나를 쏘지 마십시오.

OpenFileDialog openFileDialog1 = new OpenFileDialog();

openFileDialog1.FileName = "Filename will be ignored";
openFileDialog1.CheckPathExists = true;
openFileDialog1.ShowReadOnly = false;
openFileDialog1.ReadOnlyChecked = true;
openFileDialog1.CheckFileExists = false;
openFileDialog1.ValidateNames = false;

if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
    // openFileDialog1.FileName should contain the folder and a dummy filename
}

편집 3 : 마지막으로 Visual Studio 2005에서 실제 대화 상자를 살펴 보았습니다 (이전에 액세스 할 수 없었습니다). 표준 파일 열기 대화 상자가 아닙니다! Spy ++에서 창을 검사하고 열려있는 표준 파일과 비교하면 구조와 클래스 이름이 일치하지 않는 것을 볼 수 있습니다. 자세히 살펴보면 대화 상자 내용 사이에 약간의 차이점이 있음을 알 수 있습니다. 내 결론은 Microsoft가 Visual Studio의 표준 대화 상자를 완전히 대체 하여이 기능을 제공한다는 것입니다. 내 솔루션이나 이와 비슷한 것이 처음부터 자신의 코드를 기꺼이 코딩하지 않는 한 가능한 한 가깝습니다.