Imports System.IO Imports System.Text Public Class Form1 'CSV にヘッダ行がある場合は 1、ヘッダが無い場合は 0 にする。 Private Const FirstLine As Integer = 0 'クイズファイルの csv のパス Private quizFile As String '次に読み取る問題の番号(この場所まで Private nextLine As Integer = FirstLine Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.quizFile = "作品の問題点.csv" 'Me.quizFile = "C:\Temp\test.txt" ShowQuiz() End Sub Private Sub ShowQuiz() 'Skip メソッドを使って、ファイル上の 'nextLine 行目までのデータを読み飛ばす Dim quiz = File.ReadLines(Me.quizFile, Encoding.GetEncoding("Shift_JIS")).Skip(Me.nextLine).FirstOrDefault() If String.IsNullOrEmpty(quiz) Then 'データが無ければおしまい MessageBox.Show("全問終了です", "終了", MessageBoxButtons.OK, MessageBoxIcon.None) Label1.Text = "" Button1.Text = "" Button2.Text = "" Button3.Text = "" Button1.Tag = Nothing Button2.Tag = Nothing Button3.Tag = Nothing Me.nextLine = FirstLine Else 'データがあれば、カンマで 5 列に分割して表示 Dim items() As String = quiz.Split(",") '問題文 Label1.Text = items(0) '選択肢1~3 Button1.Text = items(1) Button2.Text = items(2) Button3.Text = items(3) '回答 Button1.Tag = items(4) Button2.Tag = items(4) Button3.Tag = items(4) End If End Sub 'Button1~3 が押されたときのイベント Private Sub Answer_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click Dim btn As Button = DirectCast(sender, Button) If btn.Tag IsNot Nothing Then If btn.Text = CStr(btn.Tag) Then MessageBox.Show("", "正解", MessageBoxButtons.OK, MessageBoxIcon.Information) Else MessageBox.Show("", "間違い", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End If '次の問題に移る Me.nextLine += 1 End If ShowQuiz() End Sub End Class