.NET アプリケーションで Windows のファイル選択ダイアログやフォルダ選択ダイアログを表示したい場合、WindowsAPICodePack
を使用するのが最も良さそうです。
他には System.Windows.Forms
や Microsoft.Win32
がありましたが、フォルダ選択ダイアログがいまいちだったり、そもそも WPF だと Windows Forms は使いたくないというのが主な理由です。
環境
- Visual Studio 2017
- .NET Framework 4.6.1
WindowsAPICodePack のインストール
NuGet パッケージマネージャーで WindowsAPICodePack
をインストールします。
PM> Install-Package WindowsAPICodePack
ファイル選択ダイアログ
基本的な使い方
using Microsoft.WindowsAPICodePack.Dialogs;
// 中略
var dialog = new CommonOpenFileDialog
{
Title = "Title",
// フォルダ選択ダイアログの場合は true
IsFolderPicker = false,
// ダイアログが表示されたときの初期ディレクトリを指定
InitialDirectory = "適当なパス",
// ユーザーが最近したアイテムの一覧を表示するかどうか
AddToMostRecentlyUsedList = false,
// ユーザーがフォルダやライブラリなどのファイルシステム以外の項目を選択できるようにするかどうか
AllowNonFileSystemItems = false,
// 最近使用されたフォルダが利用不可能な場合にデフォルトとして使用されるフォルダとパスを設定する
DefaultDirectory = "適当なパス",
// 存在するファイルのみ許可するかどうか
EnsureFileExists = true,
// 存在するパスのみ許可するかどうか
EnsurePathExists = true,
// 読み取り専用ファイルを許可するかどうか
EnsureReadOnly = false,
// 有効なファイル名のみ許可するかどうか(ファイル名を検証するかどうか)
EnsureValidNames = true,
// 複数選択を許可するかどうか
Multiselect = false,
// PC やネットワークなどの場所を表示するかどうか
ShowPlacesList = true
};
if (dialog .ShowDialog() == CommonFileDialogResult.Ok)
{
}
ファイルのフィルタリング
以下のように指定します。
dialog.Filters.Add(new CommonFileDialogFilter("テキストファイル", "*.txt;*.text"));
dialog.Filters.Add(new CommonFileDialogFilter("すべてのファイル", "*.*"));
フォルダ選択ダイアログ
IsFolderPicker
を true
にするだけです。