2017-01-24 4 views
-1

Ich versuche die Eingaben zu validieren, um nur einen Zahlenbereich zwischen 1 und 100 zu akzeptieren. Ich habe es, wo es Zahlen im Bereich von 1-100 akzeptiert. Was ich brauche ist, wie man sicherstellen kann, dass Zeicheneingaben wie ein Buchstabe oder ein Symbol (?, /, <,> ect ...) nicht verwendet werden können. Ich benutze eine Schleife, um jeden Eingang zu durchsuchen, der in ein Array eingefügt wird. Wenn Eingaben validiert werden, gebe ich ein blnOk = True zurück, um es in meinem Button-Event zu verwenden, um das Programm zu starten. Ich habe double.TryParse versucht, aber ich kann es nicht mit dem Array arbeiten. Ich habe auch Option Strict ON. dblStudentTestScores (i) ist das Array, in dem die Eingaben gespeichert werden. txtTestScores (i) Array wird verwendet, um dem Programm mitzuteilen, in welchem ​​Textfeld die Schleife aktiviert ist, damit es mit einem Fehler den Fokus erhalten kann.Eingabe des Textfelds für den numerischen Bereich prüfen 1-100

Dies ist der Code mit der IsNumeric, aber es wird nicht in die Else-Klausel gehen. Es springt in den Versuch zu fangen. Ich möchte wirklich, dass ich mich auf die Textbox konzentriere, die die ungültige Eingabe hat. Ähnlich wie wenn die Zahl nicht zwischen 0 und 100 liegt.

Private Sub ValidateScores() 

    For i = 0 To 8 
     If CInt(IsNumeric(dblStudentTestScores(i))) >= 0 And CInt(IsNumeric(dblStudentTestScores(i))) <= 100 Then 
      blnOK = True 

     Else 
      MessageBox.Show("Please Enter Test Score between 0 and 100") 
      txtTestScores(i).Clear() 
      txtTestScores(i).Focus() 
      txtTestScores(i).BackColor = Color.Yellow 
      blnOK = False 
      Exit Sub 
     End If 
     txtTestScores(i).BackColor = Color.White 
    Next 
    blnOK = True 
End Sub 

Jeder Eingang füllt das Array.

Public Sub PopulateTestScores() 
    'Student 1 test scores 
    dblStudentTestScores(0) = CDbl(txtStudent1Score1.Text) 
    dblStudentTestScores(1) = CDbl(txtStudent1Score2.Text) 
    dblStudentTestScores(2) = CDbl(txtStudent1Score3.Text) 
    'Student 2 test scores 
    dblStudentTestScores(3) = CDbl(txtStudent2Score1.Text) 
    dblStudentTestScores(4) = CDbl(txtStudent2Score2.Text) 
    dblStudentTestScores(5) = CDbl(txtStudent2Score3.Text) 
    'Student 3 test scores 
    dblStudentTestScores(6) = CDbl(txtStudent3Score1.Text) 
    dblStudentTestScores(7) = CDbl(txtStudent3Score2.Text) 
    dblStudentTestScores(8) = CDbl(txtStudent3Score3.Text) 
End Sub 
+0

Und welche Probleme haben Sie mit diesem Code? Hier sind die Validierungstests, aber ich kann nicht sehen, wo Sie die Eingaben nehmen und prüfen, ob sie wirklich Zahlen sind. – Steve

+0

Erlaubt mir immer noch die Eingabe von Zeichen wie?, /,>, Und erlaubt sogar einen Buchstaben. Ich brauche nur Nummern, die in der Eingabe verwendet werden dürfen. Das einzige, was ich an dieser Stelle überprüfen kann, ist zu überprüfen, ob die Eingabe zwischen 0 und 100 liegt. –

+0

Sie sollten double.TryParse verwenden, um zu überprüfen, ob die Eingabe gültig ist oder nicht. Können Sie den Code anzeigen, der die Doppelpunkte zum Array hinzufügt? – Steve

Antwort

1

Sie sollten double.TryParse verwenden, da, falls die Eingabe nicht ein gültiger doppelt so hoch ist, ist es false zurück, anstatt eine Ausnahme zu werfen.

Public Function PopulateTestScores() as Boolean 
    Dim ok as Boolean 
    ok = CheckInput(txtStudent1Score1.Text, 0) 
    if not ok Then 
     txtStudent1Score1.Focus() 
     return ok 
    End if 

    ok = CheckInput(txtStudent1Score2.Text, 1) 
    if not ok Then 
     txtStudent1Score2.Focus() 
     return ok 
    End if 
    ..... 
    return ok 
End Function 

private Function CheckInput(input as String, index as integer) as Boolean 
    Dim d as Double   
    Dim ok as Boolean 
    ok = double.TryParse(input, d) 
    if ok Then dblStudentTestScores(index) = d 
    return ok 
End Function 

Die Version von TryParse mit zwei Argumenten erwartet, dass die Zeichenfolge im gleichen Format Ihrer locale (Punkt/Komma für Dezimalstellen) zu sein. Wenn Sie mit verschiedenen Kulturen arbeiten möchten, verwenden Sie einfach die entsprechende TryParse-Überladung, die auch den CultureInfo-Parameter übernimmt.

Zum Beispiel, wenn Sie die Überlastung verwenden, die eine Number und ein Culture

ok = Double.TryParse(input, NumberStyles.None, CultureInfo.CurrentCulture, d) 

TryParse falsch kehrt nimmt, wenn die Eingabe nicht Ihre Culture passt und die richtige Konvention für Zifferngruppierung.

Eine gültige Doppel wie 10.1 in Kultur en-US ungültig ist die it-IT ein, wo der richtige Eingang ist 10,1

1

Sie können den Eingang mit der Funktion isNumeric überprüfen.

https://msdn.microsoft.com/en-us/library/6cd3f6w1(v=vs.90).aspx

+0

Wenn ich IsNumeric benutze, springt es zum Try/Catch. Ich brauche es, um in die Else-Klausel zu springen und die Nachricht und den Fokus auf dieses Textfeld zu legen. Die IsNumeric hört auf, die Buchstaben und Buchstaben zu erhalten. Gibt es eine Möglichkeit, es in die Else zu zwingen? –

+0

Ich bin mit Visual Basic nicht so vertraut. Ich bin extrem eingerostet, aber in den meisten Sprachen können Sie ein '!' Verwenden, um nicht zu signalisieren, im Grunde zu sagen, wenn es nicht numerisch ist, dann tun Sie dies. Also 'if! IsNumeric()'. Dann wechsle einfach den Code in der 'else' Klausel in die 'if' Klausel und umgekehrt –