我正在开设一个大学项目,我必须创建一个程序,在教师表格中存储20个问题和答案,然后在学生表格上一个接一个地显示(点击下一个按钮后)
我遇到的问题是我可以输入问题和答案(数组0到19)但是当学生回答问题时,只会显示19个问题而最后一个问题没有出现。
让我知道我可以告诉你什么来帮助解决我的问题。
Module Module1
Public myQ(0 To 19) As String
Public myA(0 To 19) As String
End Module
Public Class frmTeacher
Public myCounter As Integer
Private Sub frmTeacher_Load(sender As Object, e As EventArgs) Handles MyBase.Load
myCounter = (0)
End Sub
Private Sub btnTeacherNext_Click(sender As Object, e As EventArgs) Handles btnTeacherNext.Click
If myCounter < 19 Then
myQ(myCounter) = txtTeacherQ.Text
myA(myCounter) = txtTeacherA.Text
myCounter = myCounter + 1
txtTeacherQ.Text = ""
txtTeacherA.Text = ""
Else
MsgBox("20 Questions Created, Moving on To Student Screen")
Me.Hide()
frmStudent1.Show()
End If
End Sub
Public Class frmStudent1
Dim myScore As Integer
Dim MyCounter2 As Integer
Public myNames As String
Private Sub btnStudentHelp_Click(sender As Object, e As EventArgs) Handles btnStudentHelp.Click
MsgBox("Questions will be shown to the left, Place your answer into the box on the right and click next")
End Sub
Private Sub frmStudent1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
lblStudentQ.Text = myQ(0)
HideItAll()
txtStudentName.Visible = True
btnStart.Visible = True
End Sub
Private Sub HideItAll()
lblStudentQ.Visible = False
txtStudentA.Visible = False
txtStudentName.Visible = False
btnStudentHelp.Visible = False
btnNextStudent.Visible = False
btnStart.Visible = False
btnStudentNext.Visible = False
End Sub
Private Sub btnStudentNext_Click(sender As Object, e As EventArgs) Handles btnStudentNext.Click
If MyCounter2 < 19 Then
If txtStudentA.Text = myA(MyCounter2) Then
myScore = myScore + 1
End If
MyCounter2 = MyCounter2 + 1
lblStudentQ.Text = myQ(MyCounter2)
Else
MsgBox("Your score is " + Str(myScore))
myNames = myNames + txtStudentName.Text + ": " + Str(myScore) + vbNewLine
HideItAll()
btnNextStudent.Visible = True
End If
End Sub
Private Sub btnNextStudent_Click(sender As Object, e As EventArgs) Handles btnNextStudent.Click
Me.Refresh()
HideItAll()
txtStudentName.Visible = True
btnStart.Visible = True
End Sub
Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
myScore = 0
MyCounter2 = 0
If txtStudentName.Text = "teacher" Then
MsgBox("The scores are as follows: " + vbNewLine + myNames)
End If
HideItAll()
lblStudentQ.Visible = True
txtStudentA.Visible = True
btnStudentHelp.Visible = True
btnStudentNext.Visible = True
End Sub
End Class
答案 0 :(得分:2)
改变这个:
If MyCounter2 < 19 Then
为:
If MyCounter2 < 20 Then
或:
If MyCounter2 <= 19 Then
答案 1 :(得分:0)
将阵列声明为
时Public myQ(0 To 19) As String
你已经有效地创建了一个可以托管20个字符串的数组,它们的索引最大为0到19。这意味着您的myCounter2变量可以具有最大值19,否则您将超出数组的范围。同时,如果您只显示索引少于19的问题和答案,那么您将丢失最后几个问题/答案
您应该使用这种条件
来修复您的代码If MyCounter2 < myQ.Length Then
.....
Array.Length返回可以存储在数组的所有维度中的元素数量(20) 使用此属性更好,因为如果您更改数组大小(假设您要问40个问题得到40个答案),那么您不需要检查代码的每一行来调整出现在各处的幻数。
但是,在更改之后,当MyCounter2值为19时,btnStudentNext_Clicks事件的这一行失败
' MyCounter2 = 19 + 1
MyCounter2 = MyCounter2 + 1
' this fails because at this point MyCounter2 is 20
lblStudentQ.Text = myQ(MyCounter2)
您的代码可能会重构
Private Sub btnStudentNext_Click(sender As Object, e As EventArgs) Handles btnStudentNext.Click
If MyCounter2 < myQ.Length Then
If txtStudentA.Text = myA(MyCounter2) Then
myScore = myScore + 1
End If
MyCounter2 = MyCounter2 + 1
End if
if MyCounter2 >= myQ.Length Then
ShowResults();
else
lblStudentQ.Text = myQ(MyCounter2)
txtStudentA.Text = ""
Endif
End Sub
Private Sub ShowResults()
MsgBox("Your score is " + Str(myScore))
myNames = myNames + txtStudentName.Text + ": " + Str(myScore) + vbNewLine
HideItAll()
btnNextStudent.Visible = True
End Sub