[Tips][OpenFileDialog] まとめ

これまでに紹介した「OpenFileDialogコントロール」Tipsは下記の通りです。

  1. ダイアログの表示と選択されたファイルの取得
  2. ダイアログに表示される起動ディレクトリを取得/設定する
  3. [ファイルの種類] ボックスに表示される選択肢を設定する
  4. ダイアログタイトルを設定する
  5. 複数のファイルを選択できるようにする
  6. [読み取り専用]チェックボックスを表示する

[Tips][OpenFileDialog] [読み取り専用]チェックボックスを表示する

OpenFileDialogは、ShowReadOnlyプロパティにTrueを設定すると[読み取り専用]チェックボックスを表示させることができます(既定ではShowReadOnlyプロパティはFalseです)。

表示されたダイアログで、ユーザーが[読み取り専用]チェックボックスにチェックを付けたかどうかを調べるにはReadOnlyCheckedプロパティを参照します。

ReadOnlyCheckedプロパティがTrueであれば[読み取り専用]チェックボックスにチェックが付けられたことになります。

下記はOpenFileDialogに[読み取り専用]チェックボックスを表示する例です。

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

[読み取り専用]チェックボックスにチェックを付けて[ファイルの選択]ボタンを押すと、[読み取り専用]チェックボックスがあるダイアログが表示されます。

VBの例

' [ファイルの選択]ボタンクリック時の処理
Private Sub btnOpenDialog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenDialog.Click
    '★★★[読み取り専用]チェックボックス設定★★★
    OpenFileDialog1.ShowReadOnly = chkReadonly.Checked

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

    'ダイアログボックスの表示
    If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
        '選択されたファイルをテキストボックスに表示する
        txtSelectedFile.Text = OpenFileDialog1.FileName

        '★★★[読み取り専用]にチェックが付けられたか確認★★★
        If OpenFileDialog1.ReadOnlyChecked Then
            MessageBox.Show("[読み取り専用]がチェックされました")
        End If
    End If
End Sub

C#の例

// [ファイルの選択]ボタンクリック時の処理
Private void btnOpenDialog_Click(object sender, EventArgs e)
{
    // ★★★[読み取り専用]チェックボックス設定★★★
    openFileDialog1.ShowReadOnly = chkReadonly.Checked;

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

    // ダイアログボックスの表示
    if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        // 選択されたファイルをテキストボックスに表示する
        txtSelectedFile.Text = openFileDialog1.FileName;

        // ★★★[読み取り専用]にチェックが付けられたか確認★★★
        if ( openFileDialog1.ReadOnlyChecked )
        {
            MessageBox.Show("[読み取り専用]がチェックされました");
        }
    }
}

実行例

[Tips][OpenFileDialog] 複数のファイルを選択できる

既定ではOpenFileDialogは1つのファイルしか選択することができません。

一度に複数のファイルを選択できるようにするにはMultiselectプロパティにTrueを設定します(既定ではFalse)。

ダイアログで選択されたファイルはFileNamesプロパティで参照することができます。

FileNamesプロパティはString型の配列なので、サンプルに示すようにFor Each(C#ではforeach)などで取り出して使用します。

下記は複数のファイルを選択できるようにする例です。

フォーム内にある[複数ファイル選択可]チェックボックスにチェックを付けると、複数ファイルを選択できるダイアログが開きます。

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

VBの例

' [ファイルの選択]ボタンクリック時の処理
Private Sub btnOpenDialog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenDialog.Click
    '★★★複数のファイルを選択できるようにするかどうかの設定★★★
    OpenFileDialog1.Multiselect = chkMultiSelect.Checked

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

    'ダイアログボックスの表示
    If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
        'リストボックスの初期化
        lstFiles.Items.Clear()

        '選択されたファイルをテキストボックスに表示する
        For Each strFilePath As String In OpenFileDialog1.FileNames
            'ファイルパスからファイル名を取得
            Dim strFileName As String = IO.Path.GetFileName(strFilePath)

            'リストボックスにファイル名を表示
            lstFiles.Items.Add(strFileName)
        Next
    End If
End Sub

C#の例

// [ファイルの選択]ボタンクリック時の処理
private void btnOpenDialog_Click(object sender, EventArgs e)
{
    // ★★★複数のファイルを選択できるようにするかどうかの設定★★★
    openFileDialog1.Multiselect = chkMultiSelect.Checked;

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

    // ダイアログボックスの表示
    if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        // リストボックスの初期化
        lstFiles.Items.Clear();

        // 選択されたファイルをテキストボックスに表示する
        foreach (string strFilePath in openFileDialog1.FileNames)
        {
            // ファイルパスからファイル名を取得
            string strFileName = System.IO.Path.GetFileName(strFilePath);

            // リストボックスにファイル名を表示
            lstFiles.Items.Add(strFileName);
        }
    }
}

実行例

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

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

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

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

VBの例

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

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

    'ダイアログボックスの表示
    If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
        '選択されたファイルをテキストボックスに表示する
        txtSelectedFile.Text = OpenFileDialog1.FileName
    End If
End Sub

C#の例

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

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

    // ダイアログボックスの表示
    if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        // 選択されたファイルをテキストボックスに表示する
        txtSelectedFile.Text = openFileDialog1.FileName;
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

VBの例

'OpefFileDialogに設定するフィルター文字列格納用変数
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 btnShowDialog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShowDialog.Click
    '★★★OpenFileDialogのフィルターを設定★★★
    OpenFileDialog1.Filter = strFilter

    'ダイアログボックスの表示
    If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
        '選択されたファイルをテキストボックスに表示する
        txtSelectedFile.Text = OpenFileDialog1.FileName
    End If
End Sub

C#の例

// OpefFileDialogに設定するフィルター文字列格納用変数
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 btnShowDialog_Click(object sender, EventArgs e)
{
    // ★★★OpenFileDialogのフィルターを設定★★★
    openFileDialog1.Filter = strFilter;

    // ダイアログボックスの表示
    if ( openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK )
    {
        // 選択されたファイルをテキストボックスに表示する
        txtSelectedFile.Text = openFileDialog1.FileName;
    }
}

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