我在vb6中创建了一个测验应用程序。我有5个不同形式的问题。我正在随机化这些表格/问题。我每次出现时都会将每个问题/表单添加到列表中。如果已经调用了这5个问题,我该如何停止随机化?
我的代码:
Function randnum(ByVal lower As Integer, ByVal upper As Integer) As Integer
randnum = Int((upper - lower + 1) * Rnd + lower)
End Function
Private Sub Command1_Click()
Dim correct As Integer
Dim correct1 As Integer
Dim test As Boolean
Dim i As Integer
If Option3.Value = True Then
Form3Score.Text1.Text = Val(Val(Form3Score.Text1.Text) + 1)
Else
Form3Score.Text3.Text = Val(Val(Form3Score.Text3.Text) + 1)
End If
Start:
Randomize
Select Case randnum(0, 4)
Case 0
Form3q1.Show
Unload Form3q2
Unload Form3q3
Unload Form3q4
Unload Form3q5
Form3.Text1.Text = "Q1"
test = False
For i = 0 To Form3.List1.ListCount - 1
If Form3.Text1.Text = Form3.List1.List(i) Then
test = True
GoTo Start
End If
Next
If test = False Then
Form3.List1.AddItem ("Q1")
End If
Loop
Case 1
Do Until (Val(Form3Score.Text3.Text) + Val(Form3Score.Text1.Text) = 5)
Form3q2.Show
Unload Form3q1
Unload Form3q3
Unload Form3q4
Unload Form3q5
Form3.Text1.Text = "Q2"
test = False
For i = 0 To Form3.List1.ListCount - 1
If Form3.Text1.Text = Form3.List1.List(i) Then
test = True
GoTo Start
End If
Next
If test = False Then
Form3.List1.AddItem ("Q2")
End If
Loop
Case 2
Do Until (Val(Form3Score.Text3.Text) + Val(Form3Score.Text1.Text) = 5)
Form3q3.Show
Unload Form3q2
Unload Form3q1
Unload Form3q4
Unload Form3q5
Form3.Text1.Text = "Q3"
test = False
For i = 0 To Form3.List1.ListCount - 1
If Form3.Text1.Text = Form3.List1.List(i) Then
test = True
GoTo Start
End If
Next
If test = False Then
Form3.List1.AddItem ("Q3")
End If
Loop
Case 3
Do Until (Val(Form3Score.Text3.Text) + Val(Form3Score.Text1.Text) = 5)
Form3q4.Show
Unload Form3q2
Unload Form3q3
Unload Form3q1
Unload Form3q5
Form3.Text1.Text = "Q4"
test = False
For i = 0 To Form3.List1.ListCount - 1
If Form3.Text1.Text = Form3.List1.List(i) Then
test = True
GoTo Start
End If
Next
If test = False Then
Form3.List1.AddItem ("Q4")
End If
Loop
Case 4
Do Until (Val(Form3Score.Text3.Text) + Val(Form3Score.Text1.Text) = 5)
Form3q5.Show
Unload Form3q2
Unload Form3q3
Unload Form3q4
Unload Form3q1
Form3.Text1.Text = "Q5"
test = False
For i = 0 To Form3.List1.ListCount - 1
If Form3.Text1.Text = Form3.List1.List(i) Then
test = True
GoTo Start
End If
Next
If test = False Then
Form3.List1.AddItem ("Q5")
End If
End Select
End Sub
答案 0 :(得分:0)
只需一个表单,您就可以更轻松地完成这项工作,并且在您使用现有代码时将其缩小约80%。
将您的每个问题(即每个现有表格的内容)放在一个单独的框架中。 (最好的方法是突出显示表单上的所有元素,选择框架 - 确保你这样做 - 然后点击粘贴。)使框架成为一个控制数组(给它们相同的名称,设置索引属性来自0到4)。要显示给定的问题,您将使其可见并使所有其他框架不可见。从所有5帧不可见开始。
现在,创建一个动态(即可调整大小的)数组(我在这里称它为x:Dim x() as Integer:ReDim x(0)
将初始化它;将两个语句放在不同的行上,而不是用冒号将它们分开,因为我在这里)。这将保留已经提出的问题的值。
要获得测试问题,请首先获取0到4之间的随机数。将元素添加到x(ReDim Preserve x(UBound(x)+1)
)。将值存储在新添加的元素中(使用x(UBound(x))=yourRandomNumber
),这将评估数组中的最后一个元素)。第一次通过时,使索引与当前随机数相同的框架可见。
在随后的问题中,像以前一样得到一个随机数。然后迭代x并查看该值是否已存在(for i = 0 to UBound(x)
等)。如果是,请获取另一个随机数。当你得到一个不在数组x中的那个时,使前一帧不可见(在x - x(UBound(x)-1)
中查找前一帧的索引 - 或者迭代整个帧数组并使它们中的每一个都不可见),并使索引与当前随机数相同的框架可见。
冲洗并重复,直到你问过所有5个问题(UBound(x)=4
一旦你问过所有问题)。 (注意:如何使用UBound的例子可能不完美,因为我还没有完全测试它们,但是如果你试验一下,你应该能够解决我可能犯的任何错误.UBound评估的数量最高的数组元素。)