윈도우 프로그램을 개발할 파일 또는 폴더를 불러올 때 사용할 수 있는 도구 상자를 제공합니다.
파일을 선택하기 위해서는 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에 출력 }
버튼을 클릭하면 다음과 같은 화면이 나타납니다.
감사합니다.
'프로그래밍 > 윈도우' 카테고리의 다른 글
C# Windows Form - CSV파일을 DataTable로 가져오기 - 영상, 코드, 샘플파일 (2) | 2019.07.07 |
---|---|
C# Windows Form - CSV파일을 DataTable로 가져오기 (3) | 2019.07.07 |
파일의 속성 찾아보기(File Identifier) (0) | 2018.06.18 |
C#에서 이미지 파일의 메타데이터 정보 가져오기 (0) | 2018.06.07 |
폴더 내 파일 목록 가져오기(하위폴더 포함여부) (0) | 2018.06.07 |