ファイル保存ダイアログ

ダイアログ

System.Windows.Forms.SaveFileDialogクラス

System.Windows.Formsにはファイル保存ダイアログが用意されています。

サンプル

一番簡単にファイル保存ダイアログを表示するには以下のようにするとよいでしょう。

using (SaveFileDialog dlg = new SaveFileDialog())
{
    //ダイアログを開く
    if (dlg.ShowDialog() == DialogResult.OK)
    {
        MessageBox.Show(dlg.FileName);
    }
}

SaveFileDialogクラスはIDisposableインターフェースを継承しているのでusingを付けて使用後は解放することができます。もし宣言したファイル参照ダイアログクラスオブジェクトを再利用するということでなければusingを付けるべきだと考えます。

ここでファイルを選択したとしても、SaveFileDialog自身はファイルは削除をしません。

プロパティ

SaveFileDialogクラスに用意されているプロパティを設定することで、保存する拡張子やダイアログのタイトルなどいろんな設定ができるようになります。

以下に代表的になプロパティを紹介します。

プロパティ名初期値説明
FileName空文字ファイル名の初期値
InitialDirectory空文字初期表示フォルダの指定
Filter空文字選択可能な拡張子のフィルタ
FilterIndex1初期選択フィルタの設定
Title空文字ダイアログのタイトル
RestoreDirectoryfalseダイアログを閉じる時に現在のカレントフォルダに戻す

こんな関数はいかがでしょうか?画像ファイル編

ファイル保存ダイアログで画像ファイルを取得する関数を作りました。

関数例

/// <summary>
/// 画像ファイル保存ダイアログ
/// </summary>
/// <param name="file_name">ファイル名(初期値/ファイル名)</param>
/// <returns>
///     true  :ファイルを保存を選択した
///     false :キャンセルした
/// </returns>
private bool SaveImgFileDialog(ref string file_name)
{
    //ピクチャのフォルダを指定
    string picture_dir = System.Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);

    //フィルタの配列群
    string[] img_filters = new string[]
    {
        "jpgファイル(*.jpg;*.jpeg)|*.jpg;*.jpeg",
        "gifファイル(*.gif)|*.gif",
        "tiffファイル(*.tiff)|*.tiff",
        "pngファイル(*.png)|*.png",
        "bmpファイル(*.bmp)|*.bmp",
        "rawファイル(*.raw)|*.raw",
        "svgファイル(*.svg)|*.svg",
        "すべてのファイル(*.*)|*.*"
    };

    using (SaveFileDialog dlg = new SaveFileDialog())
    {

        dlg.FileName = file_name;                       //初期値はパラメータより                
        dlg.InitialDirectory = picture_dir;             //初期フォルダ(マイピクチャ)
        dlg.Filter = string.Join("|", img_filters);     //Jpgファイルをpngファイル以外のファイルをダイアログに表示しない
        dlg.FilterIndex = 1;                            //Filterの1つめ画像ファイルを指定
        dlg.Title = "画像ファイル指定";                 //タイトルを設定する
        dlg.RestoreDirectory = true;                    //カレントディレクトリ復元

        //ダイアログを開く
        if (dlg.ShowDialog() != DialogResult.OK)
        {
            //OKが返ってこない場合は、キャンセルされたとする。
            file_name = "";
            return false;
        }

        //選択したファイル名を取得する
        file_name = dlg.FileName;
        return true;
    }
}

使用例

private void btnSansyo_Click(object sender, EventArgs e)
{
    //初期ファイル名を設定する場合はここにセットする
    string file_name = "";

    //画像ファイル参照ダイアログを開く、キャンセルの場合は関数から抜ける
    if (SaveImgFileDialog(ref file_name) == false) return;

    //取得したファイル名をテキストボックスにセットする
    this.FileNameTextbox.Text = file_name;
}

実行結果

いろんなフィルタ

いろんな種類のフィルタを作成しました。お役に立てたら幸いです。

種類フィルタ
HTML/XMLHTML/XML(*.htm,*.html,*.shtml,*.mht,*.xml,*.xhtml,*.xht)|*.htm;*.html;*.shtml;*.mht;*.xml;*.xhtml;*.xht
テキストファイルテキストファイル(*.txt)|*.txt
スタイルシートスタイルシート(*.css,*.xsl)|*.css;*.xsl
スクリプトスクリプト(*.js;*.pl;*.pm;*.cgi;*.asp;*.bat;*.sh;*.php;*.tcl;*.vbs)|*.js;*.pl;*.pm;*.cgi;*.asp;*.bat;*.sh;*.php;*.tcl;*.vbs
画像画像(*.jpg;*.jpeg;*.gif;*.tiff;*.png;*.bmp;*.raw;*.svg)|*.jpg;*.jpeg;*.gif;*.tiff;*.png;*.bmp;*.raw;*.svg
音楽音楽(*.aac;*.m4a;*.mp3;*.wav;*.ogg;*.webm;*.flac;*.wma;*.mid)|*.aac;*.m4a;*.mp3;*.wav;*.ogg;*.webm;*.flac;*.wma;*.mid
動画動画(*.mp4;*.mov;*.wmv;*.avi;*.avchd;*.flv;*.f4v;*.swf;*.mkv;*.webm;*.html5;*.mpeg;*.mpg)|*.mp4;*.mov;*.wmv;*.avi;*.avchd;*.flv;*.f4v;*.swf;*.mkv;*.webm;*.html5;*.mpg;*.mpeg
圧縮圧縮(*.lzh;*.zip;*.cab;*.tar;*.gz;*.tgz;*.tar;*.gz)|*.lzh;*.zip;*.cab;*.tar;*.gz;*.tgz;*.tar;*.gz
フォントフォント(*.fon,*.ttf,*.ttc)|*.fon;*.ttf;*.ttc

まとめ

ファイル保存ダイアログを使ってダイアログを作成するときにこの記事が皆様のお役に立てたなら幸いです。

コメント

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