記事内に広告が含まれています。

【VB.NET】ファイルを開く(ファイルダイアログ)

VB.NETにおける、ファイルを開くダイアログを使う方法です。

ファイルダイアログ自体はダイアログを表示するだけで、実際にファイルを開くわけではありません。実際にファイルの中身を読み取る場合は、ストリームを利用します。本記事ではストリームを使ってファイルの中身を読み取る方法も合わせて紹介します。

【スポンサーリンク】

ファイルを開くダイアログ

VB.NETにおいて、ファイルを開くダイアログを使う場合は OpenFileDialog クラスを使用します。

ファイルを開くダイアログを表示する際は、

  1. ダイアログのインスタンス生成
  2. 各種プロパティを設定(省略可)
  3. ShowDialog メソッドでダイアログ表示

という流れでコーディングします。各種プロパティの設定は任意のため、必要がある場合にプロパティを設定しましょう。

実行確認様に簡単な画面を作成しました。

  • 上のテキストボックス…開いたファイルのパスを表示(本記事で解説)
  • ファイルを開くボタン…ファイルを開くダイアログを表示(本記事で解説)
  • 下のテキストボックス…ファイル保存するためのテキスト入力(別記事で解説)
  • ファイルを保存ボタン…ファイルを保存するダイアログを表示(別記事で解説)

この画面を使ってファイルを開くダイアログの動作を確認します。

【スポンサーリンク】

ファイルを開くダイアログ

ファイルを開くダイアログを表示させる方法は、OpenFileDialog を使えば、次のコードで可能です。

'OpenFileDialogのインスタンス生成
Dim objOFD As New OpenFileDialog()

'ダイアログを表示
If objOFD.ShowDialog() = DialogResult.OK Then
    MessageBox.Show("ファイルを開きました。")
End If

最低限はこのコードだけで問題ありません。

実際にダイアログを表示しているのは、ShowDialog メソッドです。ファイルを開くダイアログが表示されて、ダイアログ上の「開く」ボタンが押された場合、ShowDialog メソッドの戻り値は DialogResult.OK となります。

サンプルコードはこちら。

Private Sub cmdOpenFile_Click(sender As Object, e As EventArgs) Handles cmdOpenFile.Click
    'OpenFileDialogのインスタンス生成
    Dim objOFD As New OpenFileDialog()

    'ダイアログを表示
    If objOFD.ShowDialog() = DialogResult.OK Then
        MessageBox.Show("ファイルを開きました。")
        '対象ファイルのファイル名を表示
        txtTargetOpenFile.Text = objOFD.FileName
    End If
End Sub

ファイルを開くボタンボタンを押すと、ファイルダイアログが表示されます。

ファイルを開くと、ファイルパスがテキストボックスに表示されます。

これでOKです。

【スポンサーリンク】

ファイルを開くダイアログのプロパティを設定する

先ほどのサンプルコードだと、とりあえずファイルダイアログを開くだけなので、OpenFileDialog のインスタンス生成後、プロパティを設定して使いやすい様に設定します。

そのシーンによってプロパティをどのように設定するかは様々ですが、よく使うプロパティは以下になります。

Private Sub cmdOpenFile_Click(sender As Object, e As EventArgs) Handles cmdOpenFile.Click
    'OpenFileDialogのインスタンス生成
    Dim objOFD As New OpenFileDialog()

    'ファイルダイアログのウィンドウタイトル
    objOFD.Title = "ファイルを選択"
    'ダイアログ初期表示のディレクトリを指定
    objOFD.InitialDirectory = "D:\temp\"
    'ファイルの種類に表示される拡張子を指定
    objOFD.Filter = "テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*"
    'ファイルの種類のリストで初期表示されるものを指定(規定は1)
    objOFD.FilterIndex = 2
    '前回開いたディレクトリを復元(ただし、InitialDirectoryが優先される)
    objOFD.RestoreDirectory = True

    'ダイアログを表示
    If objOFD.ShowDialog() = DialogResult.OK Then
        MessageBox.Show("ファイルを開きました。")
        '対象ファイルのファイル名を表示
        txtTargetOpenFile.Text = objOFD.FileName
    End If
End Sub

ファイルダイアログ自体は、選択したファイルのパスを取得することが目的なので、そこまでゴリゴリにファイルダイアログのプロパティを指定する必要はありません。明確な仕様が無ければ、ユーザーライクなプロパティを設定した方が良いでしょう。

【スポンサーリンク】

ファイルの中身を読み込みたい場合

ただし、OpenFileDialog クラスで出来ることは、ファイルダイアログを使ってファイルパスを取得することなので、ファイルの中身を確認したい場合は、System.IO.StreamReader クラスを用いてファイルの中身を読み込む必要があります。

サンプルとしてはこんな感じ。

Private Sub cmdOpenFile_Click(sender As Object, e As EventArgs) Handles cmdOpenFile.Click
    'OpenFileDialogのインスタンス生成
    Dim objOFD As New OpenFileDialog()

    'ファイルダイアログのウィンドウタイトル
    objOFD.Title = "ファイルを選択"
    'ダイアログ初期表示のディレクトリを指定
    objOFD.InitialDirectory = "D:\temp\"
    'ファイルの種類に表示される拡張子を指定
    objOFD.Filter = "テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*"
    'ファイルの種類のリストで初期表示されるものを指定(規定は1)
    objOFD.FilterIndex = 2
    '前回開いたディレクトリを復元(ただし、InitialDirectoryが優先される)
    objOFD.RestoreDirectory = True

    'ダイアログを表示
    If objOFD.ShowDialog() = DialogResult.OK Then
        MessageBox.Show("ファイルを開きました。")
        '対象ファイルのファイル名を表示
        txtTargetOpenFile.Text = objOFD.FileName

        'StreamReaderのインスタンス生成
        Dim objSR As New System.IO.StreamReader(objOFD.FileName, System.Text.Encoding.GetEncoding("shift_jis"))
        Dim strMSG As String = Nothing
        '1行ずつ読み込んで出力文字列を連結
        While objSR.Peek >= 0
            strMSG += objSR.ReadLine & Environment.NewLine
        End While

        'StreamReaderで読み込んだファイルの中身をメッセージボックスに表示
        MessageBox.Show(strMSG)
    End If
End Sub

ファイルダイアログで選択したファイル名を StreamReader に渡して読み込ませているだけの簡単なサンプルです。

先述しましたが、ファイルダイアログではファイルパスを取得することが目的のため、ファイルの中身を読み込みたい場合は、StreamReader など、別途読み込むコードを書く必要があります。

【スポンサーリンク】

参考リンク

OpenFileDialog クラス (System.Windows.Forms) | Microsoft Docs

【スポンサーリンク】

関連記事

【VB.NET】ファイルダイアログを使ってファイル保存する
VB.NETにおける、ダイアログを使ってファイルを保存する方法です。 ファイルダイアログ自体はダイアログを表示するだけで、実際にファイルを開くわけではありません。実際にファイルの保存は、ファイル操作ライブラリを使う必要があります。本記事では...

.