본문 바로가기
개발언어/C#

[C#]FolderBrowserDialog 보다 좋은 폴더 선택 화면 - CommonOpenFileDialog

by 창용이랑 2022. 12. 8.
728x90

윈도우 프로그램을 개발할 파일 또는 폴더를 불러올 때 사용할 수 있는 도구 상자를 제공합니다.
파일을 선택하기 위해서는 OpenFileDialog 도구 상자를 사용하고, 폴더를 선택하기 위해서는 FolderBrowserDialog 도구 상자를 사용합니다.

 

이 중에서 폴더를 선택하기 위한 FolderBrowserDialog 은 사용하기에 불편한 점이 있습니다.
폴더 경로를 트리 구조로만 확인할 수 있고 텍스트로 확인할 수 없을 뿐만 아니라, 폴더 경로를 복사했다고 하더라도 붙여넣을 수 있는 방법이 없어서 트리구조에서 일일이 찾아야 합니다.

 

그래서 생각한 것이 OpenFileDialog 를 사용해서 폴더를 선택하는 방법이 있을까 하고 구글 검색을 하게 되었습니다.
검색 결과 OpenFileDialog 와 비슷한 형식으로 폴더를 선택하기 위해서는 MS에서 제공하는 WindowsAPICodePack 을 설치해서 CommonOpenFileDialog 도구 상자를 사용하는 것으로 문제를 해결할 수 있습니다.

 

제가 찾은 글은 여러개이지만 제가 참고한 출처는 아래와 같습니다.
Use a standard Windows dialog to let the user select a folder in C#
http://csharphelper.com/blog/2014/02/use-a-standard-windows-dialog-to-let-the-user-select-a-folder-in-c/

 

윈도우 폼 프로젝트 예제에서 CommonOpenFileDialog 를 사용하기 위해서는 Nuget 패키지에서 WindowsAPICodePack-Shell 을 설치하면 됩니다.
https://www.nuget.org/packages/WindowsAPICodePack-Shell

 

Visual Studio 2017 기준으로 상단 메뉴의 [도구(T) → Nuget 패키지 관리자(N) → 패키지 관리자 콘솔(O)]을 실행한 다음 아래 명령어를 입력합니다.

PM> Install-Package WindowsAPICodePack-Shell -Version 1.1.1

 

(상단메뉴의 [도구(T) → Nuget 패키지 관리자(N) → 솔루션용 Nuget 패키지 관리...]에서도 설치가 가능하지만 무슨 이유에서 인지 설치 시 오류가 발생하였습니다.)

 

설치가 완료되면 다음과 같이 코딩을 진행합니다.

 

1. WindowsAPICodePack Dialogs 클래스를 참조합니다.

using Microsoft.WindowsAPICodePack.Dialogs;

 

2. 버튼 클릭 이벤트 안애 아래와 같은 명령어를 입력합니다.

// CommonOpenFileDialog 클래스 생성
CommonOpenFileDialog dialog = new CommonOpenFileDialog();

// 처음 보여줄 폴더 설정(안해도 됨)
//dialog.InitialDirectory = "";

dialog.IsFolderPicker = true;

if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
    label.Text = dialog.FileName; // 테스트용, 폴더 선택이 완료되면 선택된 폴더를 label에 출력
}

버튼을 클릭하면 다음과 같은 화면이 나타납니다.

 

출처 : https://ilbbang.tistory.com/entry/FolderBrowserDialog-%EB%B3%B4%EB%8B%A4-%EA%B4%9C%EC%B0%AE%EC%9D%80-%ED%8F%B4%EB%8D%94-%EC%84%A0%ED%83%9D-%ED%99%94%EB%A9%B4-CommonOpenFileDialog