2016-11-09 1 views
-1

Ich versuche, meine Eingaben zu validieren. Ich bin mir nicht sicher, was ich vermisse. Es funktioniert, wenn ich es teste. Es wird die Fehlermeldung werfen, aber immer noch die Berechnung durchführen. Ich bin sicher, es hat etwas damit zu tun (Dim blnOK As Boolean = True). Kann jemand mir helfen, die Eingabe zu validieren und es stoppen zu lassen und korrekte Informationen einzutragen, anstatt nur die Fehlermeldung zu geben. Ich will nicht, dass es berechnet, ob die Eingabe schlechte Daten sind.Validierung der Eingabe in VB

Public Class frmFallingDistance 
Dim blnOK As Boolean = True 

Private Sub Validation(ByRef FallTime As Decimal) 

    'Validate inputs 
    'Input needs to be numeric 
    If IsNumeric(txtFallTime.Text) Then 
     FallTime = CDec(txtFallTime.Text) 
    Else 
     MessageBox.Show("Please enter a numeric value") 
     txtFallTime.Focus() 
     txtFallTime.BackColor = Color.Yellow 
     blnOK = False 
     Exit Sub 
    End If 

    'Input can't be less than 0 
    If FallTime < 0 Then 
     MessageBox.Show("Please enter a numeric value 0 or greater") 
     txtFallTime.Focus() 
     txtFallTime.BackColor = Color.Yellow 
     blnOK = False 
     Exit Sub 
    End If 

    blnOK = True 
End Sub 

Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click 

    ''declare local variables 
    Dim decFall As Decimal   'gives variable (t) in equation 
    Dim decFallDistance As Decimal 'gives variable (d) in equation 
    Dim decAnswer As Decimal 
    Dim decFallTime As Decimal  'validating data in txtFallTime 

    'Return backcolor to white 
    txtFallTime.BackColor = Color.White 


    'Validate inputs 
    Validation(decFallTime) 

    'Run FallingDistance Function 
    decAnswer = FallingDistance(decFall, decFallDistance) 

    'Display falling distance in meters 
    lblFallingDistance.Text = decAnswer.ToString 

End Sub 

Ich versuchte es, eine Funktion zu machen, aber es wäre immer noch die Gesamt zu berechnen, anstatt die Berechnung stoppen und zwingt mich, in gültige Daten in den Eingang zu setzen.

Private Function Validation(ByVal FallTime As Decimal) As Decimal 

    'Validate inputs 
    'Input needs to be numeric 
    If IsNumeric(txtFallTime.Text) Then 
     FallTime = CDec(txtFallTime.Text) 
    Else 
     MessageBox.Show("Please enter a numeric value") 
     txtFallTime.Focus() 
     txtFallTime.BackColor = Color.Yellow 
     blnOK = False 
    End If 

    'Input can't be less than 0 
    If FallTime < 0 Then 
     MessageBox.Show("Please enter a numeric value 0 or greater") 
     txtFallTime.Focus() 
     txtFallTime.BackColor = Color.Yellow 
     blnOK = False 
    End If 

    Return CDec(blnOK = True) 

End Function 

ich es herausgefunden ich das Click-Ereignis zu ‚Validate Eingänge Validation (decFallTime)

 If blnOK = True Then 


      'Run FallingDistance Function 
      decAnswer = FallingDistance(decFall, decFallDistance) 

      'Display falling distance in meters 
      lblFallingDistance.Text = decAnswer.ToString 

     End If 

Das einzustellen brauchte mir erlaubt, meine Validierung mit der boolean zu überprüfen und tun dann die Berechnung .

+0

Bitte den Funktionscode des Anrufers anzeigen. – shanyour

+0

ein Vorschlag, die Funktion zu verwenden und FallTime darauf zu setzen, 'lngFallTime = Validation (FallTime)' und Dim blnOK Als Boolean dann nächste Zeile blnOK = True –

+0

Machen Sie es zu einer Funktion, die * einen * booleschen Wert zurückgibt bei der Rückkehr. Wie es ist, tut es mehr als die Validierung, es setzt ein Flag, analysiert einen gültigen Wert und fungiert als eine Steuerprozedur – Plutonix

Antwort

0

von meinem Verständnis, Sie wollten TxtFallTime numerischen Wert annehmen. Wenn dies der Fall ist, wäre es viel einfacher, KeyPress zu verwenden, um Benutzereingaben zu validieren.

Private Sub txtFallTime_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtFallTime.KeyPress 
    'This enables the textbox to only accept numbers 
    '8 is the ascii code for space 
    '48 to 57 is the ascii code for 0-9 

    If Asc(e.KeyChar) <> 8 Then 
     If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then 
      e.Handled = True 
      MsgBox("Numeric input required") 
     End If 
    End If 

End Sub 
Verwandte Themen