2016-04-06 6 views
1

Ich erstelle eine Quizanwendung in vb6. Ich habe 5 Fragen, die in verschiedenen Formen verfügbar sind. Ich bin randomisiert diese Formen/Fragen. Ich füge jede Frage/jedes Formular hinzu, um es jedes Mal aufzulisten, wenn es erscheint. Wie kann ich die Randomisierung stoppen, wenn diese 5 Frage bereits aufgerufen wird?So stoppen Sie die Randomisierung, wenn eine Bedingung erfüllt ist

mein Code:

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

pls ignorieren die do-Schleife. Ich habe es versucht, aber es funktioniert nicht –

Antwort

0

Sie können dies viel leichter mit nur einer Form, und schrumpfen Ihre vorhandenen Code um etwa 80%, während Sie gerade dabei sind.

Legen Sie jede Ihrer Fragen (d. H. Den Inhalt jedes Ihrer vorhandenen Formulare) in einem separaten Rahmen. (Am besten markieren Sie dazu alle Elemente in einem Formular, wählen Sie den Rahmen aus - gehen Sie dazu - und drücken Sie Einfügen.) Machen Sie die Rahmen zu einem Kontrollfeld (geben Sie ihnen denselben Namen und setzen Sie die Index-Eigenschaft) 0 bis 4). Um eine bestimmte Frage anzuzeigen, werden Sie sie sichtbar machen und alle anderen Rahmen unsichtbar machen. Beginnen Sie mit allen 5 Frames unsichtbar.

Jetzt machen Sie eine dynamische (d. H. Resizable) Array (ich werde es hier x nennen: Dim x() as Integer:ReDim x(0) wird es initialisieren; setzen Sie die beiden Anweisungen auf separaten Zeilen statt sie mit einem Doppelpunkt zu trennen, wie ich es hier habe). Dies wird die Werte der Fragen enthalten, die bereits gestellt wurden.

Um eine Testfrage zu erhalten, erhalte zuerst eine Zufallszahl zwischen 0 und 4. Füge ein Element zu x hinzu (ReDim Preserve x(UBound(x)+1)). Speichern Sie den Wert in dem neu hinzugefügten Element (verwenden Sie x(UBound(x))=yourRandomNumber), das für das letzte Element in dem Array ausgewertet wird). Beim ersten Mal machen Sie den Rahmen mit dem Index, der Ihrer aktuellen Zufallszahl entspricht.

Bei nachfolgenden Fragen, erhalten Sie eine Zufallszahl wie zuvor. Dann iteriere x und schau, ob der Wert schon da ist (for i = 0 to UBound(x), etc.). Wenn ja, erhalte eine andere Zufallszahl. Wenn Sie ein Array erhalten, das nicht bereits in Array x ist, machen Sie das vorherige Frame unsichtbar (suchen Sie den Index des vorherigen Frames in x-- x(UBound(x)-1) - oder iterieren Sie das gesamte Frame-Array und machen Sie jedes davon unsichtbar), und erstellen Sie den Frame mit dem Index, der der aktuellen Zufallszahl entspricht.

Spülen und wiederholen, bis Sie alle 5 Fragen gestellt haben (UBound(x)=4, sobald Sie sie alle gefragt haben). (Hinweis: Die Beispiele zur Verwendung von UBound sind möglicherweise nicht perfekt, da ich sie nicht vollständig getestet habe, aber wenn Sie etwas experimentieren, sollten Sie in der Lage sein, etwaige Fehler zu ermitteln. UBound berechnet die Anzahl von das höchste Array-Element.)