久しぶりに使うと、ほぼ何もかも忘れているのです…
検索するとわかるいい時代だね~
C#のWPFアプリで、業務の自動化を行っています。ファイルを選択するダイアログを実装する際に、少し迷った点がありましたので、その備忘録です。
つまづいた点
C#の「WPFアプリ」で、ファイルを選択して読み込みたいとき、OpenFileDialogという機能が利用できます。初めてこの機能を触る時、または、久しぶりに触って忘れている時、普通に検索すると、次のような点に引っ掛かりそうでしたので、その記録となります。
1.WPFアプリのOpenFileDialogのusingはMicrosoft.Win32
WPFアプリは「using Microsoft.Win32」とすることで、ファイルを開くダイアログの機能、OpenFileDialogの機能が利用できます。「using System.Windows.Forms」のというフォームアプリケーションとは違うので、この点少し気づくのに時間がかかりました。
2.選択可能なファイル形式の指定
OpenFileDialogのファイル形式の指定で文字列で指定する部分で「文字列|*.csv」という形式に気づくのに少しだけ時間がかかりました。
「文字列」と「拡張子」を「|」(パイプ)でつなぎ、左の文字列がダイアログの拡張子指定のプルダウンに表示される文字列になり、右側が実際に一覧に表示されるファイルの拡張子です。この形式にしていなかったので、文字列としてファイル名が取得できない点でつまづきました^^;
実装した機能
ボタンをクリックすると、ファイル選択ダイアログが出現して、CSVファイルが選択できます。CSVファイルを選択すると、その中身がコンソールに表示されます。
CSVファイルを選択すると、ダイアログで「ファイルパス+ファイル名」が表示されます。
実装例
UIの実装
WPFアプリの新規プロジェクトを作成して、xamlファイルでボタンを配置します。
ボタンコンポーネントをダブルクリックすると、MainWindow.xaml.csファイルにButton_Clickedというハンドラが追加されます。ここに、ダイアログを開く処理を追加していきます。
ダイアログの処理
MainWindow.xaml.csに追加された「Button_Click」関数の内容を以下のように実装しました。
private void Button_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine("cllick");
string csvfile_name = null;
//[1]OpenFileDialogのオブジェクトを作成します。
var ofd = new OpenFileDialog();
//[2]ファイルの拡張子指定を行います。
ofd.Filter = "CSVファイル(*.csv)|*.csv";
//[3]ダイアログの処理です。
if (ofd.ShowDialog() == true)
{
MessageBox.Show(ofd.FileName);
}
}
[2]の部分の拡張子の指定も、今回躓いたポイントでした。中心を「|」(パイプ)で分けて、左にダイアログ拡張子プルダウンの文字列、右側に実際にダイアログに表示する拡張子になります。
テストデータは、次のようなCSVデータを準備して検証しました。
項目1,項目2,項目3
data1,data2,data3
data4,data5,data6
実装時に参考にさせて頂いたサイト
OpenFileDialogのプログラムを参考にさせて頂いたサイト
https://johobase.com/wpf-file-folder-common-dialog/
実際の実装には、例外処理をいれて、エラーがわかるようにしておく必要もありますので、この後の実装の際に、例外処理もいれました。
例外処理の参考サイト