VB.NETにおける、ファイルを開くダイアログを使う方法です。
ファイルダイアログ自体はダイアログを表示するだけで、実際にファイルを開くわけではありません。実際にファイルの中身を読み取る場合は、ストリームを利用します。本記事ではストリームを使ってファイルの中身を読み取る方法も合わせて紹介します。
ファイルを開くダイアログ
VB.NETにおいて、ファイルを開くダイアログを使う場合は OpenFileDialog クラスを使用します。
ファイルを開くダイアログを表示する際は、
- ダイアログのインスタンス生成
- 各種プロパティを設定(省略可)
- 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
関連記事
.