2017-01-03 8 views
1

Ich versuche, ein kleines Powershell-Programm zu erstellen, das Sie ein zufälliges Wort fragt, und Sie müssen es übersetzen. Ich verwende den Index beider Arrays, um festzustellen, ob die Antwort richtig ist oder nicht.PowerShell-Zähler nicht inkrementieren

Jedes Mal, wenn der Benutzer eine richtige oder falsche Antwort eingibt, sollte ein Textfeld seinen Wert erhöhen, um anzuzeigen, wie viele Benutzer bisher richtig oder falsch geraten sind. Das Programm funktioniert so wie es sollte, aber der Zähler ist nicht. In diesem Moment erhöht sich der Zähler nur auf 1 und geht nicht über 1. Ich vermisse etwas?

Ich denke, das Problem könnte sein, dass PowerShell immer den Wert von der externen Countercorrect und Counterwrong, die 0 ist, aber wie könnte ich lösen, dass es nur den inkrementierten Wert aufruft?

$QuestionArray = New-Object System.Collections.ArrayList 
$AnswerArray = New-Object System.Collections.ArrayList 
$countercorrect = 0 
$counterwrong = 0 

#word array 
$QuestionArray.Add("word1") 
$QuestionArray.Add("word2") 
$QuestionArray.Add("word3") 

#solution array 
$AnswerArray.Add("answer1") 
$AnswerArray.Add("answer2") 
$AnswerArray.Add("answer3") 

#Function to display a new word 
function Question { 
    $global:RandomQuestion = $QuestionArray | Get-Random 
    $SearchedTextbox.Text = $global:RandomQuestion 
} 

$InputTextbox.Add_KeyDown({ 
    if ($_.KeyCode -eq "Enter") { 
     #Get User Guess 
     $Answer = $InputTextbox.Text 
     #Get Solution array Index 
     $IndexPositionQuestion = [array]::indexof($QuestionArray, $global:RandomQuestion) 
     #Get User answer array Index 
     $IndexPositionAnswer = [array]::indexof($AnswerArray, $Answer) 
     #Check if both indexes match 
     If($IndexPositionAnswer -eq $IndexPositionQuestion){ 

      #this fails/doesn't go above 1 
      $RightTextBox.Text = countercorrect++ 
      Question 
     }else{ 

      #this fails/doesn't go above 1 
      $WrongtTextBox.Text = counterwrong++ 
      Question 
     } 
    } 
}) 

Ich habe versucht, eine separate Funktion den Wert zu erhöhen, aber auch das erhöht nur auf 1

+1

Der Code enthält einige Variablenbezeichner: '$ RightTextBox.Text = countercorrect ++'. Sind das nur Fehler beim Kopieren-Einfügen-Bearbeiten? – vonPryz

+1

'$ countercorrect ++' -> '$ script: Gegenkorrekt ++', '$ counterwrong ++' -> '$ script: counterwrong ++'. Sie befinden sich im Funktionsumfang, wenn Sie den Zähler erhöhen/verringern (ungetestet, aber ich bin ziemlich zuversichtlich). Und yeah, wie @vonPryz erwähnt hat, vermisst du ein paar '$' Zeichen. – sodawillow

+0

Danke! Ja mein Fehler sie waren in der Tat Copy Paste Fehler. @sodawillow Vielen Dank für die Lösung ich versuchte mit $ script: countercorrect ++ vorher aber nur innerhalb einer anderen Funktion und es löschte nur den gesamten Wert aus irgendeinem Grund. Aber es außerhalb einer Funktion zu verwenden funktioniert wie ein Zauber! –

Antwort

2

Vereinfachtes Beispiel:

$form = New-Object System.Windows.Forms.Form 

$counter = 0 

$button = New-Object System.Windows.Forms.Button 
$button.Text = "button" 
$button.Add_Click({ 

    $script:counter++ 

}) 

$form.Controls.Add($button) 

$form.ShowDialog() 

$counter 

Wenn Sie $script:counter++ mit $counter++ ersetzen, ist der Wert nicht richtig inkrementiert.