【WPF】ファイル 選択 ダイアログ ユーザーコントロールを自作しよう!

C#入門
この記事は約4分で読めます。

趣味や仕事に活かせるようなプログラムを作ろうとすると、必ずと言って良いほどファイルを選択する機能が必要になります。

幸いなことにWPFでもファイル選択ダイアログは標準で備わっていますので、今回はそれを使った「ファイル選択ダイアログ」のユーザーコントロールを作ってみました。

ファイル選択ダイアログの概要

見た目は前回作ったフォルダ選択ダイアログと同じです。

ファイル選択ダイアログは、読み込むためのファイルを選択(指定)するケースと、保存したいファイル名を選択(指定)するケースの2通りがあります。

このため、ダイアログも2通り用意されていますが、読み込むか保存するかの違いを除けば、ほぼ必要な機能は共通しています。

そこで、今回作成するユーザーコントロールは、読み込みと保存を兼用する形にしました。

機能としては次の通りです。

  • ダイアログの動作モード(ファイル読み込み用、ファイル保存用)の指定
  • テキスト部にファイル名を直接入力
  • ファイル選択ダイアログの表示とファイルの選択
  • テキスト部にファイルをドラッグ&ドロップで入力
  • ファイル名が入力された時のイベント発生

動作モードがファイル読み込み用の場合、次のダイアログが表示されます。

動作モードがファイル保存用の場合、次のダイアログが表示されます。

ダウンロード先

今回のソースコードのダウンロード先は次の通りです。

デモプログラムに張り付けていますので、すぐに動作確認が出来る様になっています。

デモプログラムの仕様については、こちら をご参照ください。

ソースコード

では、ソースコードを見ていきましょう。

まずはXamlのソースコードです。

次にC#のソースコードです。

使い方

使用可能なプロパティとイベントは次の通りです。

カテゴリ名前説明
プロパティFileName選択したファイル名
プロパティFilter対象ファイルの拡張子を絞り込むフィルタ
プロパティDialogTypeダイアログモード
FileSelectDialogType.Open 読み込み用
FileSelectDialogType.Save  保存用
イベントFileSelectedドラッグ&ドロップ、ダイアログ選択、
手入力でファイルが選択された時に発行されるイベント

Filterプロパティ

ダイアログを表示する際、ダイアログ内で特定の拡張子をフィルタリングするためのものです。

“説明1|ワイルドカード1|説明2|ワイルドカード2|・・・” という風に記述します。

例えば、”CSV/TSV|*.csv;*.tsv|全てファイル|*.*” と記述すると、

  • 拡張子がcsvとtsvのファイルのみの
  • 全てのファイル

ダイアログで切り替えて選択できるようになります。

DialogTypeプロパティ

ファイル選択ダイアログをファイル読み込み用で使うか、ファイル保存用で使うかはDialogTypeプロパティで指定します。

Xamlで指定する場合

コードで指定する場合

FileSelectedイベント

テキスト部に任意のファイルをドラッグ&ドロップするか、ダイアログでファイルを選択するか、ファイル名を手入力してEnterキーを押したタイミングでイベントが発生します。

もし、ファイルを選択した瞬間にファイルを読み込む等の処理を行わせたい場合は、このイベントハンドラを記述して下さい。

まとめ

今回はファイル選択ダイアログを使ったユーザーコントロールを作りました。

ちょっとした機能ですが、毎回ゼロから作ったり別のソースからコピーするのは面倒ですので、ユーザーコントロールにしておくと便利です。

フォルダ選択ダイアログの場合はWindowsForm の参照設定が必要でしたが、ファイル選択ダイアログはWPFに標準装備されているのでお手軽です。

色々とカスタマイズしてお役立ていただければ幸いです。

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