【備忘録】C#のフォルダ選択ダイアログって結局どっちが良いの?(FolderBrowserDialog VS CommonOpenFileDialog)

C#

皆さん、こんにちは!
上越市を拠点にし、「FA設備・装置開発」と「画像処理」に強い会社、NSIです!
私達は豊富な経験と専門知識で、各種業界の自動化・システム化のお手伝いをしています。

あっという間に6月に突入!
もうすぐ梅雨ですが、雨にも負けず頑張って行きましょう!
さて、今回は久々のプログラムネタです。

PCを使っていると時々見かける、フォルダ選択ダイアログ。
今回はそんな「フォルダ選択ダイアログ」についての比較記事となります。
ぜひご覧ください!

FolderBrowserDialog とは?

C#でソフト開発する際、デフォルトで実装できるのは「FolderBrowserDialog」です。
ピンとこない方もいると思うので、表示させてみましょう。

中には見たことある方もいるのではないでしょうか?
これがデフォルトで実装できる「FolderBrowserDialog」です。

しかし、ある重大な欠点が…

このダイアログ、一見すると何も問題がないように思えます。
しかし、ある重要な機能がないのがお分かりでしょうか?

そう、実は「パスを直接入力する欄がない」のです。
そのため、指定の階層にあるフォルダを選択する際、1つずつフォルダを展開してたどり着く必要があります。
ドライブの直下など、フォルダ階層が浅ければまだ良いものの、階層が深くなればなるほど手間がかかります。

欠点を解消するには?

初期表示する際のフォルダを事前に設定しておく、というのが一つの手です。
しかし、場合によって参照したいフォルダが変わる場合は、工夫して実装する必要があるといえます。

CommonOpenFileDialog とは?

こちらはNugetからインストールすることで使用可能なライブラリです。
こちらも早速表示してみましょう。

これが「CommonOpenFileDialog」です。

最大の利点は?

ところでこのダイアログ、何か見覚えがあるような気がしませんか?
そう、エクスプローラーとほぼ同じように表示されています。
そのため、パスの直接入力はもちろん、表示方法を変更できるのが利点です。

インストール方法

Nugetパッケージの管理を開き「WindowsAPICodePack-Shell」と検索します。
先頭に表示されるため、インストールします。(以下参照)

2つのダイアログ比較

2つのダイアログを様々な観点で比較してみました。

FolderBrowserDialog項目CommonOpenFileDialog

一般的なフォルダダイアログ。
フォルダのみ選択可能。
UI
エクスプローラーと似ている。
ショートカットも選択可能。

1階層毎に展開する必要あり。
操作性
パスの直接入力が可能。

基本的なカスタマイズが可能。
(ルートフォルダの指定など)
カスタマイズ性
基本的なカスタマイズの他、
複数選択・隠しファイルの表示有無

などの設定も可能。

デフォルトで使用可能。
導入負荷
Nugetでのインストール必須。

FolderBrowserDialogはデフォルトで使用できるのがメリットです。
参照先が固定で、シンプルなフォルダ選択機能を実装したい場合はこちらがオススメです。

CommonOpenFileDialogはパスを直接入力できるのがメリットです。
参照先を自由に指定でき、豊富なオプションを使用したフォルダ選択機能を実装したい場合はこちらがオススメです。

べんぞうくん
べんぞうくん

個人的にはCommonOpenFileDialogがオススメ。

参考:実装時のソースコード

各フォルダ選択ダイアログのソースコードを記載します。
どちらもソースコードの記述量はほぼ変わりません。

FolderBrowserDialog

private void button1_Click(object sender, EventArgs e)
{
    using (FolderBrowserDialog fbd = new FolderBrowserDialog())
    {
        if(fbd.ShowDialog(this) == DialogResult.OK)
        {
            // 何らかの処理
        }
    }
}

CommonOpenFileDialog

※「using Microsoft.WindowsAPICodePack.Dialogs;」の記載が先頭になければ追加してください。

private void button2_Click(object sender, EventArgs e)
{
    using (CommonOpenFileDialog cofd = new CommonOpenFileDialog())
    {
        // フォルダを選択できるようにする
        cofd.IsFolderPicker = true;

        if(cofd.ShowDialog() == CommonFileDialogResult.Ok)
        {
            // 何らかの処理
        }
    }
}

最後に

今回はフォルダ選択ダイアログを比較してみました。
どちらにもメリットやデメリットがあります。
実装に迷った際は、ぜひこの記事を参考にしてみてください!

ここまで読んでいただき、ありがとうございました。
ご質問・ご要望・ご相談などは、下記お問い合わせフォームからお気軽にご連絡ください。
http://www.net-nsi.co.jp/toiawase.html

べんぞうくん
べんぞうくん

この記事が役に立ったらGoodボタンを押してね~

タイトルとURLをコピーしました