如果满足某些条件,如何停止随机化

时间:2016-04-06 01:05:26

标签: vb6

我在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

1 个答案:

答案 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评估的数量最高的数组元素。)