2017-05-06 1 views
-3

Für ein Portfolio-Projekt verwendet haben, ich bin versucht, ein Spiel mit Windows Forms zu erstellen, und ich dieses Problem habe, die ich nicht, um herauszufinden,Wie eine einzige Taste für mehrere Ereignisse Visual Basic

scheinen

Ich habe einen Spielbildschirm, der erfordert, dass der Benutzer die Antwort auf eine Frage eingibt und dann die nächste Taste drückt, um die Antwort = auf eine Variable zu setzen oder irgendeine Art von Aktion auszuführen, und dann diese Taste auch die nächste Frage an die Listbox.

Gibt es eine Art Pause, die ich einbauen kann, damit die nächste Listbox-Ausgabe auf den Button-Klick wartet? Wenn ja, wie würde ich das tun, ich kann nirgendwo etwas finden.

Public Class frmGame 
    Public Sub frmGame_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' main game window, dim's variables 
     lstOutput.Items.Add("Please enter your name") 
    End Sub 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnNext.Click 'Next button, advances the game 
     lstOutput.ClearSelected() 
     Dim name As String = txtInput.Text 

     lstOutput.Items.Add("Are you a boy or a girl, enter the number of your choice") 
    End Sub 

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles btnNext.Click 'Next button, advances the game 
     lstOutput.ClearSelected() 
     Dim name As String = txtInput.Text 

     lstOutput.Items.Add("e") 
     Dim gender As String = txtInput.Text 
    End Sub 

    Private Sub btnReset_Click(sender As Object, e As EventArgs) Handles btnReset.Click 'clears textbox for user input 

    End Sub 

    Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click 
     Me.Close() 
    End Sub 
End Class 
+1

Sie haben zwei Handler für dieselbe Schaltfläche definiert. Sie werden beide ausgeführt, wenn darauf geklickt wird. Es ist sehr unklar, was Sie tun möchten, aber es scheint, dass es entweder ein großes 'if ... else if ...' in dem einzigen Click-Handler, der die möglichen Schritte in Ihrem Programm darstellt, oder mehrere Handler, die Sie anhängen, enthält Trennen Sie sich je nach Bedarf, oder wechseln Sie sogar zum Konsolenkonjekttyp, je nachdem, welche Art von Interaktion Sie anstreben. – GSerg

+0

Ich möchte das Programm in der Lage sein, eine Frage zu stellen, den Benutzer die Antwort auf diese Frage in das Textfeld eingeben, dann auf die Schaltfläche "Weiter" klicken und eine neue Frage angezeigt bekommen. Ich denke, eine Konsolen-App zu machen wäre einfacher, weil es mir erlaubt, eine Pause zwischen den Fragen zu machen, die auf Enter warten – ToastyMatt

Antwort

0

ich das Programm möchte eine Frage der Lage sein, zu fragen, haben Sie den Benutzertyp die Antwort auf diese Frage in der Textbox, dann drücken Sie die Schaltfläche „Weiter“ und haben eine neue Frage erscheinen

Klasse erstellen, die Frage-Antwort-Daten

Public Class Question  
    Public ReadOnly Property Text As String 
    Public Property Answer As String 

    Public Sub New(text As String) 
     Me.Text = text 
    End Sub 
End Class 

Dann Sammlung von Fragen initialisieren darstellt und in Klicken Sie auf "Weiter", um durch die ganze Sammlung von Fragen zu blättern.

Public Class frmGame 
    Private _questions As List(Of Question) 
    Private _currentQuestionIndex As Integer = -1 

    Public Sub frmGame_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     _questions = Return New List(Of Question) From 
     { 
      new Question("Please enter your name"), 
      new Question("Question 1"), 
      new Question("Question 2"), 
      new Question("Last question") 
     } 

     MoveToNextQuestion() 
    End Sub 

    Private Sub ButtonNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click 
     Dim currentQuestion = _questions[_currentQuestionIndex] 
     currentQuestion.Answer = txtInput.Text 

     If IsCurrentQuestionLast() Then 
      ProcessAnswers() 
     Else 
      MoveToNextQuestion() 
     End If 
    End Sub 

    Private Sub MoveToNextQuestion() 
     _currentQuestionIndex += 1 

     txtInput.Text = Stirng.Empty 
     txtQuestionText.Text = _questions[_currentQuestionIndex] 
    End Sub 

    Private Function IsCurrentQuestionLast() 
     Return _currentQuestionIndex = _questions.Count - 1 
    End Function 

    Private Sub ProcessAnswers() 
     For Each question In _questions 
      ' Do something with question.Answer 
     Next 
    End Sub 
End Class