プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2017/11/25

ファイル選択ダイアログとフォルダ選択ダイアログ

event_note2017/11/25 2:18

.NET アプリケーションで Windows のファイル選択ダイアログやフォルダ選択ダイアログを表示したい場合、WindowsAPICodePack を使用するのが最も良さそうです。

他には System.Windows.FormsMicrosoft.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("すべてのファイル", "*.*"));

フォルダ選択ダイアログ

IsFolderPickertrue にするだけです。

参考 URL