[C#] OpenFileDialog를 사용하여 폴더를 선택하는 방법은 무엇입니까?

OpenFileDialog폴더를 선택 하는 방법 ?

다음 프로젝트를 사용하려고했습니다 : https://github.com/scottwis/OpenFileOrFolderDialog

그러나 나는 한 가지 문제에 직면했다. GetOpenFileName기능과 OPENFILENAME구조를 사용합니다 . 그리고 OPENFILENAME라는 멤버가 templateID있습니다. 대화 상자 템플릿의 식별자입니다. 그리고 프로젝트에는 res1.rc파일과 템플릿 대화 상자 가 포함되어 있습니다. 그러나이 파일을 C # 프로젝트에 첨부하는 방법을 알 수 없었습니다.

를 사용하여 OpenFileDialog폴더를 선택 하는 더 좋은 방법이 있습니까?



답변

기본적으로 FolderBrowserDialog수업 이 필요합니다 .

사용자에게 폴더를 선택하라는 메시지를 표시합니다. 이 클래스는 상속 될 수 없습니다.

예:

using(var fbd = new FolderBrowserDialog())
{
    DialogResult result = fbd.ShowDialog();

    if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath))
    {
        string[] files = Directory.GetFiles(fbd.SelectedPath);

        System.Windows.Forms.MessageBox.Show("Files found: " + files.Length.ToString(), "Message");
    }
}

WPF 에서 작업하는 경우 에 참조를 추가해야합니다 System.Windows.Forms.

당신은 또한 수업 에 추가 using System.IO해야 Directory합니다


답변

을 사용하지 않으려는 향후 사용자를위한 참고 사항으로 FolderBrowserDialogMicrosoft는 유용한 대화 상자가있는 WindowsAPICodePack이라는 API를 릴리스했습니다.이 API CommonOpenFileDialogIsFolderPicker모드 로 설정할 수 있습니다 . 이 API는 Microsoft에서 NuGet 패키지로 제공 됩니다.

이것이 설치 및 사용에 필요한 전부 CommonOpenFileDialog입니다. (NuGet은 종속성을 처리했습니다)

Install-Package Microsoft.WindowsAPICodePack-Shell

포함 라인의 경우 :

using Microsoft.WindowsAPICodePack.Dialogs;

용법:

CommonOpenFileDialog dialog = new CommonOpenFileDialog();
dialog.InitialDirectory = "C:\\Users";
dialog.IsFolderPicker = true;
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
    MessageBox.Show("You selected: " + dialog.FileName);
}


답변

이 사용 hackish 솔루션 OpenFileDialogValidateNames과는 CheckFileExistsfalse로 두 세트되고 FileName디렉토리가 선택되어 있는지 표시하기 위해 모의 값이 부여됩니다.

폴더를 선택하는 방법에 대해 사용자에게 혼란을주기 때문에 해킹이라고 말합니다. 원하는 폴더에 있어야하며 파일 이름에 “폴더 선택”이라고 표시된 상태에서 열기를 누르면됩니다.

C # 폴더 선택 대화 상자

이는 Denis Stankovski 의 동일한 대화 상자에서 파일 또는 폴더 선택을 기반으로 합니다 .

OpenFileDialog folderBrowser = new OpenFileDialog();
// Set validate names and check file exists to false otherwise windows will
// not let you select "Folder Selection."
folderBrowser.ValidateNames = false;
folderBrowser.CheckFileExists = false;
folderBrowser.CheckPathExists = true;
// Always default to Folder Selection.
folderBrowser.FileName = "Folder Selection.";
if (folderBrowser.ShowDialog() == DialogResult.OK)
{
    string folderPath = Path.GetDirectoryName(folderBrowser.FileName);
    // ...
}


답변

답변 / 투표가 너무 이상하지만 아무도 다음 코드를 답변으로 추가하지 마십시오.

using (var fldrDlg = new FolderBrowserDialog())
{
    //fldrDlg.Filter = "Png Files (*.png)|*.png";
    //fldrDlg.Filter = "Excel Files (*.xls, *.xlsx)|*.xls;*.xlsx|CSV Files (*.csv)|*.csv"

    if (fldrDlg.ShowDialog() == DialogResult.OK)
    {
        //fldrDlg.SelectedPath -- your result
    }
}


답변

FolderBrowserDialog 바로 뒤에있는 것처럼 들립니다 .


답변

여기에 하나의 간단한 ZIP 파일로 모든 소스를 사용할 수있는 또 다른 솔루션이 있습니다.

OpenFileDialog에 Windows 7+ 폴더 선택 대화 상자처럼 작동하도록하는 추가 Windows 플래그가 표시됩니다.

웹 사이트에 따르면, 그것은 공개 도메인입니다 : “당신이 원하는 코드를 가지고 자유롭게 할 수있는 라이센스는 없습니다.”

Archive.org 링크 :


답변

Windows Forms 및 WPF에 대한 폴더 브라우저 대화 상자가 각각 구현 된 Ookii 대화 상자 라이브러리를 살펴보십시오 .

여기에 이미지 설명을 입력하십시오

Ookii.Dialogs.WinForms

https://github.com/augustoproiete/ookii-dialogs-winforms


Ookii.Dialogs.Wpf

https://github.com/augustoproiete/ookii-dialogs-wpf