当我使用这些循环时,为什么这个程序会冻结?

时间:2016-12-10 22:30:48

标签: vb.net

所以我是Visual Basic的极端初学者,我尝试使用单选按钮和标签进行简单的4个问题测验,该标签允许用户选择所呈现问题的答案然后记录他们正确回答了多少问题。我决定使用循环来计算用户所处的问题,以及他们已正确回答了多少问题。我必须在这里遗漏一些明显的东西,因为当我单击按钮启动此代码时,程序完全冻结。

我做错了什么? (如果这个问题过于模糊,请道歉)

Private Sub QuizButton1_Click(sender As Object, e As EventArgs) Handles QuizButton1.Click
        Dim question As Integer = 0
        Dim correct As Integer = 0
        Do Until question = 4

            While question = 0
                QuizLabel1.Text = "How much force do the Great Horned Owl's talons put out while clenched? A. 28 pounds B. 13 pounds C. 200 pounds D. 20 pounds"
                If Abutton1.Checked Then
                    question = 1
                    correct = correct + 1
                ElseIf Bbutton1.Checked Then
                    question = 1
                ElseIf Cbutton1.Checked Then
                    question = 1
                ElseIf Dbutton1.Checked Then
                    question = 1
                End If
            End While
            While question = 1
                QuizLabel1.Text = "What's a nickname for the Great Horned Owl? A. Lion Owl B. Tiger Owl C. Hawk Owl D. Cat Owl "
                If Abutton1.Checked Then
                    question = 2
                ElseIf Bbutton1.Checked Then
                    question = 2
                    correct = correct + 1
                ElseIf Cbutton1.Checked Then
                    question = 2
                ElseIf Dbutton1.Checked Then
                    question = 2
                End If
            End While
            While question = 2
                QuizLabel1.Text = "Why is this owl called 'Horned'? A. It has small horns B. It has pointy ears C. Common folklore D. It has feathery tufts on its head"
                If Abutton1.Checked Then
                    question = 3
                ElseIf Bbutton1.Checked Then
                    question = 3

                ElseIf Cbutton1.Checked Then
                    question = 3
                ElseIf Dbutton1.Checked Then
                    question = 3
                    correct = correct + 1
                End If

            End While
            While question = 3
                QuizLabel1.Text = "What's the maximum recorded length of a Great Horned Owl? A. 20.4 inches B. 15.8 inches C. 12.3 inches D. 24.8 inches"
                If Abutton1.Checked Then
                    question = 4
                ElseIf Bbutton1.Checked Then
                    question = 4

                ElseIf Cbutton1.Checked Then
                    question = 4
                ElseIf Dbutton1.Checked Then
                    question = 4
                    correct = correct + 1
                End If
            End While
        Loop
        Dim score As Integer
        score = correct * 25
        QuizLabel1.Text = "Thanks for taking the quiz! You scored a " & score & "%. Press the button below to play again."
    End Sub

1 个答案:

答案 0 :(得分:2)

我不是VB专家,但我可以在这里提供一些帮助。如果我不得不猜测我会说你的程序是锁定的,因为它处于无限循环中。我认为循环是在不断评估,不允许其他任何东西。我会使用事件处理程序,并在用户单击答案时触发评估。看起来你有一个事件处理程序来启动测验,但循环接管了。我不确定你的布局是什么,但我正在使用你的a,b,c和d芒的按钮。当您单击该按钮时,它会对事件进行分类并进行相应处理。我试着让这很容易理解。有更优雅的方法来实现这一点,但这将有效。尝试这样的事情:

Public Class Form1

    Dim question As Integer
    Dim correct As Integer

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        correct = 0
        Label2.Text = correct

        Abutton1.Hide()
        Bbutton1.Hide()
        Cbutton1.Hide()
        Dbutton1.Hide()
    End Sub

    Private Sub QuizButton1_Click(sender As Object, e As EventArgs) Handles QuizButton1.Click
        question = 0
        QuizLabel1.Text = "How much force do the Great Horned Owl's talons put out while clenched? A. 28 pounds B. 13 pounds C. 200 pounds D. 20 pounds"
        QuizButton1.Hide()
        Abutton1.Show()
        Bbutton1.Show()
        Cbutton1.Show()
        Dbutton1.Show()
    End Sub

    Private Sub Abutton1_Click(sender As Object, e As EventArgs) Handles Abutton1.Click
        test(1)
    End Sub

    Private Sub Bbutton1_Click(sender As Object, e As EventArgs) Handles Bbutton1.Click
        test(2)
    End Sub

    Private Sub Cbutton1_Click(sender As Object, e As EventArgs) Handles Cbutton1.Click
        test(3)
    End Sub

    Private Sub Dbutton1_Click(sender As Object, e As EventArgs) Handles Dbutton1.Click
        test(4)
    End Sub

    Private Sub test(button)

        Select Case question
            Case 0
                If button = 1 Then
                    correct = correct + 1
                    Label2.Text = correct
                End If

                question = question + 1
                QuizLabel1.Text = "What's a nickname for the Great Horned Owl? A. Lion Owl B. Tiger Owl C. Hawk Owl D. Cat Owl "
            Case 1
                If button = 1 Then
                    correct = correct + 1
                    Label2.Text = correct
                End If

                question = question + 1
                QuizLabel1.Text = "What's a nickname for the Great Horned Owl? A. Lion Owl B. Tiger Owl C. Hawk Owl D. Cat Owl "
            Case 2
                If button = 4 Then
                    correct = correct + 1
                    Label2.Text = correct
                End If

                question = question + 1
                QuizLabel1.Text = "Why is this owl called 'Horned'? A. It has small horns B. It has pointy ears C. Common folklore D. It has feathery tufts on its head"
        End Select

    End Sub

End Class