[Tips][SaveFileDialog] まとめ

これまでに紹介したSaveFileDialogのTipsは下記の通りです。

  1. ダイアログの表示と入力されたファイル名の取得
  2. ダイアログに表示される起動ディレクトリを取得/設定する
  3. [ファイルの種類] ボックスに表示される選択肢を設定する
  4. 複数のドットが付いた拡張子をサポートする
  5. ダイアログタイトルを設定する
  6. 既存のファイル名が入力されたときに警告を出すかどうかを設定する

[Tips][SaveFileDialog] 既存のファイル名が入力されたときに警告を出すかどうかを設定する

SaveFileDialogは、既定でユーザーが入力したファイル名が既存のファイル名と同じ場合、警告メッセージを表示するようになっています。

警告メッセージを表示するかどうかはOverwritePromptプロパティ(既定ではTrue)で設定することができます。

下記は警告メッセージを表示するかどうかを設定する例です。

サンプルの画面デザインは下記のようにしました。

VBの例

' [ファイルの保存]ボタンクリック時の処理
Private Sub btnShowSaveDialog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShowSaveDialog.Click
    '★★★既存のファイル名を入力した場合に警告メッセージを表示するかどうかを設定★★★
    SaveFileDialog1.OverwritePrompt = chkOverwritePrompt.Checked

    'ダイアログタイトルの設定
    SaveFileDialog1.Title = "画像ファイルの保存"

    'フィルターの設定
    SaveFileDialog1.Filter = "画像ファイル|*.bmp;*.gif;*.png"

    'ダイアログボックスの表示
    SaveFileDialog1.ShowDialog()
End Sub

' [保存]ボタンクリック時の処理
Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
    '選択されたファイルをテキストボックスに表示する
    txtSelectedFile.Text = SaveFileDialog1.FileName
End Sub

C#の例

// [ファイルの保存]ボタンクリック時の処理
private void btnShowSaveDialog_Click(object sender, EventArgs e)
{
    // ★★★既存のファイル名を入力した場合に警告メッセージを表示するかどうかを設定★★★
    saveFileDialog1.OverwritePrompt = chkOverwritePrompt.Checked;

    // ダイアログタイトルの設定
    saveFileDialog1.Title = "画像ファイルの保存";

    // フィルターの設定
    saveFileDialog1.Filter = "画像ファイル|*.bmp;*.gif;*.png";

    // ダイアログボックスの表示
    saveFileDialog1.ShowDialog();
}

// [保存]ボタンクリック時の処理
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
    // 選択されたファイルをテキストボックスに表示する
    txtSelectedFile.Text = saveFileDialog1.FileName;
}

実行例

[Tips][SaveFileDialog] ダイアログタイトルを設定する

SaveFileDialogのタイトルバーに表示されるテキストは、Titleプロパティで設定することができます。

下記はダイアログタイトルを設定する例です。

ダイアログタイトルに「画像ファイルを選択」というテキストを表示させています。

VBの例

' [ファイルの保存]ボタンクリック時の処理
Private Sub btnShowSaveDialog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShowSaveDialog.Click
    '★★★ダイアログタイトルの設定★★★
    SaveFileDialog1.Title = "画像ファイルの保存"

    'フィルターの設定
    SaveFileDialog1.Filter = "画像ファイル|*.bmp;*.gif;*.png"

    'ダイアログボックスの表示
    SaveFileDialog1.ShowDialog()
End Sub

' [保存]ボタンクリック時の処理
Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
    '選択されたファイルをテキストボックスに表示する
    txtSelectedFile.Text = SaveFileDialog1.FileName
End Sub

C#の例

// [ファイルの保存]ボタンクリック時の処理
private void btnShowSaveDialog_Click(object sender, EventArgs e)
{
    // ★★★ダイアログタイトルの設定★★★
    saveFileDialog1.Title = "画像ファイルの保存";

    // フィルターの設定
    saveFileDialog1.Filter = "画像ファイル|*.bmp;*.gif;*.png";

    // ダイアログボックスの表示
    saveFileDialog1.ShowDialog();
}

// [保存]ボタンクリック時の処理
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
    // 選択されたファイルをテキストボックスに表示する
    txtSelectedFile.Text = saveFileDialog1.FileName;
}

[Tips][SaveFileDialog] 複数のドットが付いた拡張子をサポートする

SaveFileDialogでは、複数のドットが付いた拡張子をサポートすることができます。

たとえば*.tar.gzのような拡張子をFilterプロパティに設定することが可能です。

ただし、この機能は既定ではオフにされており有効にするにはSupportMultiDottedExtensionsプロパティにTrueを設定する必要があります。

下記は複数のドットが付いた拡張子をサポートする例です。

画面デザインは下記のようにしました。

VBの例

' [ファイルの保存]ボタンクリック時の処理
Private Sub btnShowSaveDialog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShowSaveDialog.Click
    '★★★複数のドットが付いた拡張子をサポートする★★★
    SaveFileDialog1.SupportMultiDottedExtensions = True

    'フィルターの設定
    SaveFileDialog1.Filter = "tar.gzファイル|*.tar.gz"

    'ダイアログの表示
    SaveFileDialog1.ShowDialog()
End Sub

' [保存]ボタンクリック時の処理
Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
    Dim strFileName As String

    '★★★入力されたファイル名を取得★★★
    strFileName = IO.Path.GetFileName(SaveFileDialog1.FileName)

    'ファイル名をテキストボックスに表示
    txtInputFile.Text = strFileName
End Sub

C#の例

// [ファイルの保存]ボタンクリック時の処理
private void btnShowSaveDialog_Click(object sender, EventArgs e)
{
    // ★★★複数のドットが付いた拡張子をサポートする★★★
    saveFileDialog1.SupportMultiDottedExtensions = true;

    // フィルターの設定
    saveFileDialog1.Filter = "tar.gzファイル|*.tar.gz";

    // ダイアログの表示
    saveFileDialog1.ShowDialog();
}

// [保存]ボタンクリック時の処理
private void SaveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
    string strFileName;

    // ★★★入力されたファイル名を取得★★★
    strFileName = System.IO.Path.GetFileName(saveFileDialog1.FileName);

    // ファイル名をテキストボックスに表示
    txtInputFile.Text = strFileName;
}

実行例は下記の通りです。

[Tips][SaveFileDialog] [ファイルの種類] ボックスに表示される選択肢を設定する

SaveFileDialogボックスでは、[ファイルの種類] ボックスに表示される選択肢を設定することができます。

選択肢を設定する場合はFilterプロパティに次のような書式を設定します。

“表示する文字列|フィルターする拡張子”

たとえば、Filterプロパティに “png画像|*.png” という文字列を設定すると、[ファイルの種類]ボックスは下図のようになり拡張子が*.pngのファイルのみを選択できるようになります。

また、複数の選択肢を設定することもできます。

たとえば”png画像|*.png|gif画像|*.gif”というフィルターを設定すると、png画像の選択肢とgif画像の選択肢が追加されます。

さらに、1つの選択肢で複数の拡張子をフィルターすることもできます。

この場合は、フィルターする拡張子をセミコロン(;)で区切って指定します。

たとえば”jpg画像|*.jpeg;*.jpg”と設定すると[ファイルの種類]ボックスは下図のようになり、*.jpegと*.jpgのファイルを選択できるようになります。

下記は、以上を踏まえて[ファイルの種類] ボックスに表示される選択肢を設定する例です。

画面デザインは下記のようにしました(クリックで拡大表示します)。

VBの例

'SavefFileDialogに設定するフィルター文字列格納用変数
Private strFilter As String = ""

' [追加]ボタンクリック時の処理
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
    'strFilterにフィルター文字列がすでにあるか?
    If strFilter.Length > 0 Then
        '文字列の末尾に"|"を追加
        strFilter &= "|"
    End If

    '「表示する文字列|フィルターする拡張子」の文字列をstrFilterに格納
    strFilter &= txtString.Text & "|" & txtFilter.Text
End Sub

' [ダイアログの表示]ボタンクリック時の処理
Private Sub btnShowSaveDialog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShowSaveDialog.Click
    '★★★OpenFileDialogのフィルターを設定★★★
    SaveFileDialog1.Filter = strFilter

    'ダイアログの表示
    SaveFileDialog1.ShowDialog()
End Sub

' [保存]ボタンクリック時の処理
Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
    '選択されたファイルをテキストボックスに表示する
    txtInputFile.Text = SaveFileDialog1.FileName
End Sub

C#の例

// SavefFileDialogに設定するフィルター文字列格納用変数
private string strFilter = "";

// [追加]ボタンクリック時の処理
private void btnAdd_Click(object sender, EventArgs e)
{
    // strFilterにフィルター文字列がすでにあるか?
    if (strFilter.Length > 0)
    {
        //文字列の末尾に"|"を追加
        strFilter += "|";
    }

    //「表示する文字列|フィルターする拡張子」の文字列をstrFilterに格納
    strFilter += txtString.Text + "|" + txtFilter.Text;
}

// [ダイアログの表示]ボタンクリック時の処理
private void btnShowSaveDialog_Click(object sender, EventArgs e)
{
    // ★★★OpenFileDialogのフィルターを設定★★★
    saveFileDialog1.Filter = strFilter;

    // ダイアログボックスの表示
    saveFileDialog1.ShowDialog();
}

// [保存]ボタンクリック時の処理
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
    // 選択されたファイルをテキストボックスに表示する
    txtInputFile.Text = saveFileDialog1.FileName;
}

実行例は下記の通りです。