OpenFileDialog를 사용하여 폴더를 선택하는 방법은 무엇입니까? 문제에 직면했다. GetOpenFileName기능과 OPENFILENAME구조를 사용합니다 .

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디렉토리가 선택되어 있는지 표시하기 위해 모의 값이 부여됩니다.

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

이는 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