のにっき

【C#】フォルダ選択ダイアログを推奨しない理由

Windowsフォームアプリ等でツールを作成する際、
フォルダのパスを取得したいとき、
なんとなく思いつくのが選択ダイアログだと思います。
このダイアログですが、個人的に推奨しません!
今回はその理由とフォルダパスを取得する時に推奨する方法をご紹介します。

ダイアログを推奨しない理由

使い手の工程数が多い!

ダイアログという手法は直感的で分かりやすいのですが、
いかんせん指定フォルダを選択するまでの手順が多すぎます!
ツール設計で大事な事は
ツールを使う時の作業工程が少ないことです。
業務で使うツールは特に、何度も使用することになります。
作業工程が少なければ少ないほど、作業時間が短縮される。
つまりは業務改善につながります。
パスを取得する作業時間は極限まで短縮するツールを作りましょう!

推奨しない使用例

こんなツールを作るときはダイアログを絶対使用してはいけません!
という例を挙げてみます。
・複数のパスを取得しないといけない
 →一つ一つダイアログを開く必要があるので、
 ものすごく手順がめんどくさいツールになります
・毎回使うたびに、違うフォルダ(ファイル)のパスを取得しないといけない
 →毎回同じパスでいいなら、前回の記入パスを記憶すればいいので
 ダイアログでも大丈夫だと思います。
 毎回新しくファイル選択が必要になるならダイアログは推奨できません

ダイアログに代わるパス設定仕様

フォルダをドラッグ&ドロップ

これにつきます!
作業対象のファイルをそのままドラッグ&ドロップ(D&D)できる仕様です。
ダイアログと違って、作業手順が一発で終了なので
とても簡単にパスの設定が可能です。

導入手順(Windowsフォームアプリ)

ドラッグ&ドロップの設定方法を、例を用いて説明します

フォームデザイン
f:id:apuridasuo:20200826191252p:plain
図:説明用フォーム内容

図のように、フォームの中にTextBoxを作って
そこにパスを記入させる仕様になります。
※フォームの中で、ドラッグできることを知らせるようにしましょう。

ソースコード

ドラッグイベント用の関数になります。

/**************************************************************************
   【EV】記入欄D&D時
**************************************************************************/
// ドロップ
private void Txt_Path_DragDrop(object sender, DragEventArgs e)
{
    // ドロップパス取得
    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false);
    TextBox Txt_Set = (TextBox)sender;
    // 正常ならコントロールに反映
    Txt_Set.Text = files[0];
}
// ドラッグ
private void Txt_Path_DragEnter(object sender, DragEventArgs e)
{
    //マウスカーソルの表示更新
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        e.Effect = DragDropEffects.All;
    }
    else
    {
        e.Effect = DragDropEffects.None;
    }
}

このソースで大事な部分は

// ドロップパス取得
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false);

この部分だと思います。
ドロップされたファイルが複数の場合を想定して、文字列の配列で取得しています。
そして記入するパスは一つなので、
配列の先頭パスをTextBoxに記入しています。
複数パスを一気に取得したい場合も、
配列でドロップされた全てのパスを取得しているので対応可能です。

プロパティ設定
f:id:apuridasuo:20200826192623p:plain
図:プロパティ、イベント設定

上図を参考に、記入したイベント関数の設定を行います。
以上で、ドラッグ&ドロップの仕様組み込みが完了です。

ぜひ、ドラッグ&ドロップの仕様を実際にツールに取り入れてみてください。
ダイアログとは比べ物にならないくらい使いやすくなると思います。
私も昔はダイアログを当たり前のように使っていましたが、
今回紹介したドラッグ仕様に気づけてから
業務用ツールの使いやすさが格段に上がりました!