かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

WPF4.5入門 その38 「ファイルダイアログ」

WPFは、ファイルを開いたり保存するためのダイアログを提供しています。以下の2つのダイアログがあります。

  • SaveFileDialog:ファイルを保存するときに使用するダイアログです。
  • OpenFileDialog:ファイルを開くときに使用するダイアログです。

これらのダイアログは、主に以下のような流れで使用します。

  • インスタンスを生成する。
  • Titleプロパティと、Filterプロパティを設定する。
  • ShowDialogを呼び出してダイアログを表示する。
  • ダイアログの戻り値を確認してOKが押されている場合は、FileNameプロパティかFileNamesプロパティを使用して選択されたファイルを取得する。

プロパティの説明を以下に示します。

プロパティ 説明
public string Title { get; set; } ファイルダイアログのタイトルに表示されるテキストを取得または設定します。
public string Filter { get; set; } ファイルダイアログで選択できるファイルの種類を示すフィルターを取得または設定します。
public string FileName { get; set; } ファイルダイアログで選択されたファイルのフルパスを取得または設定します。
public string[] FileNames { get; } ファイルダイアログで選択されたすべてのファイルのフルパスを取得します。

Filterプロパティの書式について詳しく説明します。Filterプロパティは以下のような書式で指定します。

全てのファイル|*.*|ワードファイル|*.doc;*.docx

表示用のラベルと対象の拡張子を|で区切って記述します。対象の拡張子が複数ある場合は;で区切って指定します。上記の記述では、全てのの拡張子を対象とした全てのファイルと、docとdocxという拡張子を対象としたワードファイルという選択肢がファイルダイアログに表示されます。

次に、ShowDialogメソッドについて説明します。

メソッド 説明
public Nullable ShowDialog() ファイルダイアログを表示します。OKが選択された場合は、trueを返して、それ以外の場合はfalseを返します。

以下に、OpenFileDialogとSaveFileDialogの使用例を示します。

画面は、ButtonコントロールとTextBlockコントロールを並べたシンプルなものです。

<StackPanel>
    <StackPanel Orientation="Horizontal">
        <Button Content="FileOpen" Click="FileOpenButton_Click" />
        <Button Content="FileSave" Click="FileSaveButton_Click" />
    </StackPanel>
    <TextBlock x:Name="textBlockFileName" />
</StackPanel>

コードビハインドの、Buttonのクリックイベントでダイアログを表示してファイル名を画面に表示しています。

private void FileOpenButton_Click(object sender, RoutedEventArgs e)
{
    var dialog = new OpenFileDialog();
    dialog.Title = "ファイルを開く";
    dialog.Filter = "全てのファイル(*.*)|*.*";
    if (dialog.ShowDialog() == true)
    {
        this.textBlockFileName.Text = dialog.FileName;
    }
    else
    {
        this.textBlockFileName.Text = "キャンセルされました";
    }
}

private void FileSaveButton_Click(object sender, RoutedEventArgs e)
{
    var dialog = new SaveFileDialog();
    dialog.Title = "ファイルを保存";
    dialog.Filter = "テキストファイル|*.txt";
    if (dialog.ShowDialog() == true)
    {
        this.textBlockFileName.Text = dialog.FileName;
    }
    else
    {
        this.textBlockFileName.Text = "キャンセルされました";
    }
}

実行してボタンを押すと、以下のようにダイアログが表示されます。

f:id:okazuki:20140816112627p:plain

ファイルを選択するとTextBlockに選択したファイルのフルパスが表示されます。

f:id:okazuki:20140816112707p:plain

過去記事