while schleife unterbrechen, um auf eine EIngabe zu warten

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von dickmann_hh.

    while schleife unterbrechen, um auf eine EIngabe zu warten

    hallo ihr,

    es geht nun weiter mit meinem Beginner-Quiz-Projekt.
    hier nochmals der Ablauf:
    1. lade nummerierte Frage-Antwortliste aus einer Textdatei
    2. importiere die Frage-Antwortliste in ein n x 2 Array
    3. mische die Frage-Antwortliste und neu sortieren --> das mache ich später
    4. zeige die Fragen eine nach der anderen gemäß der neuen Reihenfolge der Frage-Antwortliste
    4.1 wenn eine Frage gestellt worden ist, warte auf Eingabe der Antwort durch User in eine Textbox und durch bestätigen durch Drücken der Enter Taste--> hier stecke ich gerade fest
    4.2 wenn Enter gedrückt worden ist, dann prüfe, ob Antwort richtig ist --> das würde ich noch hinbekommen
    5. wenn alle Fragen gestellt sind, dann zeige eine Meldung --> das war die einfachste Übung :)

    ich vermute, es geht am besten mit Events. aber ich weiß nicht recht, wie es geht.
    das habe ich bisher als Funktion, um die Frage anzuzeigen:

    VB.NET-Quellcode

    1. Private Function showQuestionFunc()
    2. dim testNumberInQuiz as Integer = 1
    3. While testNumberInQuiz < numberRows + 1 'numberRows ist die Anzahl der Fragen
    4. answerEntered = False
    5. questionWordTxtBox.Text = $"{wordList(testNumberInQuiz , 1)}" '1.spalte: Fragenummer, 2.Spalte:Frage, 3.Spalte; Antwort
    6. answerWord = wordList(testNumberInQuiz , 2)
    7. 'HIER UNTERBRECHEN und auf eingabe warten!!
    8. 'nur wie??
    9. testNumberInQuiz = testNumberInQuiz + 1
    10. End While
    11. MsgBox("alle Fragen gestellt")
    12. End Function


    vielen Dank für Eure Hilfe!
    @dickmann_hh Völlig falsche Herangehensweise.
    Du brauchst keine While-Schleife, sondern ein funktionierendes Konzept.
    Bis Du das erarbeitet hast, empfehle ich Dir, keine Zeile Coe zu schreiben.
    Fang an mit der Anzeige der ersten Frage.
    In einer Button_Click wertest Du aus, ob die Antwort stimmt.
    Wenn ja => Nächste Frage oder Ende
    Wenn nein => Mahnung oder was Du da tun willst.
    Gezählt werden die Fragen in der Klasse, nicht aber in der Prozedur.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    vielen Dank für die Anregung!
    jetzt bin ich ohne while ausgekommen. hab es wie folgt gelöst (ähnlich wie Du geschrieben hast):
    0. Auswerten, bei welcher Frage der User jetzt ist (testNumberInQuiz mit 1 initialisieren)
    1. Anzeige ersten Frage
    2. nach EIngabe der Antwort kann entweder mit Enter oder mittels Button_Click die Antwort ausgewertet (Button hatte ich schon vorher :)
    2.1 wenn richtig: testNumberInQuiz hochzählen und nächste Frage anzeigen
    2.2. wenn falsch: wiederholen oder nächste Frage
    3. wenn testNumberInQuiz >, zeige Meldung

    VB.NET-Quellcode

    1. Private Function showQuestionFunc(ByVal testNumberInTest As Integer)
    2. If testNumberInQuiz< numberRows + 1 Then 'numberRows ist die Anzahl der Fragen
    3. itemNrBox.Text = "Eintrag Nr.: " & testNumberInQuiz
    4. questionWordTxtBox.Text = $"{wordList(testNumberInQuiz, 1)}" '1.spalte: Fragenummer, 2.Spalte:Frage, 3.Spalte; Antwort
    5. questionWord = questionWordTxtBox.Text
    6. answerWord = wordList(testNumberInQuiz, 2)
    7. Else
    8. MsgBox("alle Fragen gestellt")
    9. End If
    10. End Function


    VB.NET-Quellcode

    1. Private Sub checkAnswerButton_Click(sender As Object, e As EventArgs) Handles checkAnswerButton.Click
    2. testNumberInQuiz= testNumberInQuiz+ 1
    3. checkAnswerButtonFunc(testNumberInQuiz, questionWord, answerWordTxtBox.Text) 'when checkAnswerButton is pressed, then run function checkAnswerButtonFunc to check whether answerWord is correct
    4. End Sub


    nun mache ich mich über die nächste Optimierung her...

    Danke!!
    Jou.
    Und dies noch;

    dickmann_hh schrieb:

    VB.NET-Quellcode

    1. If testNumberInQuiz< numberRows + 1 Then 'numberRows ist die Anzahl der Fragen

    VB.NET-Quellcode

    1. If testNumberInQuiz <= numberRows Then
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!