投稿者 魔界の仮面弁士  (社会人) 投稿日時 2015/11/9 14:54:36
> Dim PostalCode As String
「PostalCode」って、郵便番号のことですよね。


> コレクションに格納せずにやる方法はありませんか? 
「何問目」を表示するのかを管理するための
Integer 変数を用意し、そこまで読み飛ばすとか。


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