I'm trying to use message boxes to stop a user from continuing to the next form but not really sure what's going wrong. The message box pops up but still changes to the next form. Any help please?
Edit: Thanks for all your help but now the age check isn't working so you can enter any age you want and it doesn't show an error. Any ideas. I'll put all altered code at the end
Dim errorcount As Integer = 0
Private Sub btnContinue_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnContinue.Click
strName = txtName.Text
strAddress = rtfAddress.Text
strCity = txtCity.Text
strEmail = txtEmail.Text
strHomePhone = mtxtHomePhone.Text
strMobilePhone = mtxtMobilePhone.Text
If txtName.Text = "" Then
MessageBox.Show("You must enter full name", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
btnNext.Enabled = False
errorcount += 1
GoTo A
ElseIf IsNumeric(txtName.Text) Then
MessageBox.Show("Please enter a valid name", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
btnNext.Enabled = False
errorcount += 1
GoTo A
End If
If txtAge.Text = "" Then
MessageBox.Show("You must enter your age", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
btnNext.Enabled = False
errorcount += 1
GoTo A
'Else
' strAge = Integer.Parse(txtAge.Text)
End If
'Declaring age check
Dim AgeCheck As Boolean = False
If IsNumeric(txtAge.Text) = True Then
AgeCheck = True
strAge = Integer.Parse(txtAge.Text)
ElseIf strAge < 18 Then
MessageBox.Show("You must be over 18 years old", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
btnNext.Enabled = False
ElseIf strAge > 125 Then
MessageBox.Show("Don't be stupid. You're not that old.", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
btnNext.Enabled = False
ElseIf AgeCheck = False Then
MessageBox.Show("You must enter a valid age", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
btnNext.Enabled = False
End If
If Not IsNumeric(txtAge.Text) Then
MessageBox.Show("Please enter a vadid age", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
btnNext.Enabled = False
errorcount += 1
GoTo A
End If
If IsNumeric(rtfAddress.Text) Or rtfAddress.Text = "" Then
MessageBox.Show("Please enter your address", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
btnNext.Enabled = False
errorcount += 1
GoTo A
End If
If IsNumeric(txtCity.Text) Or txtCity.Text = "" Then
MessageBox.Show("Please enter your town/city", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
btnNext.Enabled = False
errorcount += 1
GoTo A
End If
'if no index hasd been selected
If cmbCounty.SelectedItem = "" Then
MessageBox.Show("Please select a county", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
btnNext.Enabled = False
errorcount += 1
GoTo A
End If
If Not mtxtHomePhone.MaskCompleted Then
MessageBox.Show("Please enter a valid home phone number", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
btnNext.Enabled = False
errorcount += 1
GoTo A
End If
If Not mtxtMobilePhone.MaskCompleted Then
MessageBox.Show("Please enter a valid mobile phone number", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
btnNext.Enabled = False
errorcount += 1
GoTo A
End If
If txtEmail.Text = "" Then
MessageBox.Show("You must enter a valid email address", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
btnNext.Enabled = False
errorcount += 1
GoTo A
ElseIf Not txtEmail.Text.Contains("@") Then
MessageBox.Show("Not a valid email address", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
btnNext.Enabled = False
errorcount += 1
GoTo A
End If
A:
If errorcount >= 5 Then
MessageBox.Show("Too many errors. Shutting down", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Warning)
End
End If
Me.Hide()
frmCreditCardInfo.Show()
End Sub
*Dim errorcount As Integer = 0
Private Sub btnContinue_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnContinue.Click
strName = txtName.Text
strAddress = rtfAddress.Text
strCity = txtCity.Text
strEmail = txtEmail.Text
strHomePhone = mtxtHomePhone.Text
strMobilePhone = mtxtMobilePhone.Text
If txtName.Text = "" Then
MessageBox.Show("You must enter full name", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
errorcount += 1
Exit Sub
ElseIf IsNumeric(txtName.Text) Then
MessageBox.Show("Please enter a valid name", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
errorcount += 1
Exit Sub
End If
If txtAge.Text = "" Then
MessageBox.Show("You must enter your age", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
errorcount += 1
Exit Sub
End If
'Declaring age check
Dim AgeCheck As Boolean = False
If IsNumeric(txtAge.Text) = True Then
AgeCheck = True
'strAge = Integer.Parse(txtAge.Text)
ElseIf strAge < 18 Then
MessageBox.Show("You must be over 18 years old", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
ElseIf strAge > 125 Then
MessageBox.Show("Don't be stupid. You're not that old.", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
ElseIf AgeCheck = False Then
MessageBox.Show("You must enter a valid age", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Exit Sub
End If
If Not IsNumeric(txtAge.Text) Then
MessageBox.Show("Please enter a vadid age", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
errorcount += 1
End If
If IsNumeric(rtfAddress.Text) Or rtfAddress.Text = "" Then
MessageBox.Show("Please enter your address", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
errorcount += 1
Exit Sub
End If
If IsNumeric(txtCity.Text) Or txtCity.Text = "" Then
MessageBox.Show("Please enter your town/city", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
errorcount += 1
Exit Sub
End If
'if no index hasd been selected
If cmbCounty.SelectedItem = "" Then
MessageBox.Show("Please select a county", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
errorcount += 1
Exit Sub
End If
If Not mtxtHomePhone.MaskCompleted Then
MessageBox.Show("Please enter a valid home phone number", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
errorcount += 1
Exit Sub
End If
If Not mtxtMobilePhone.MaskCompleted Then
MessageBox.Show("Please enter a valid mobile phone number", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
errorcount += 1
Exit Sub
End If
If txtEmail.Text = "" Then
MessageBox.Show("You must enter a valid email address", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
errorcount += 1
ElseIf Not txtEmail.Text.Contains("@") Then
MessageBox.Show("Not a valid email address", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
errorcount += 1
Exit Sub
End If
If errorcount >= 5 Then
MessageBox.Show("Too many errors. Shutting down", "Error", MessageBoxButtons.OK, _
MessageBoxIcon.Warning)
Me.Dispose()
Exit Sub
'End
'Exit Sub
End If
Me.Hide()
frmCreditCardInfo.Show()
End Sub
End Class*
Your code has quite a few logical errors, for example:
First, you check that
txtAge.Text
is numeric. If yes, you parse it into the same String. Why? It's already numeric. Well, actuallyIsNumeric
can also mean a decimal. But there is no point in doing parsing twice, instead of just one time. Then, if it's not numeric, you proceed withElseIf
. SupposestrAge = "AAA"
, now you are doing a string comparison"AAA" < 18
. Why it's bad, see below.I am pretty sure you have
Option Strict Off
, because otherwise compiler would shout at you at this very line. Problem is that your comparison implicitly becomes"AAA" < "18"
, which isFalse
(you can use Immediate Window to check). However, when it reaches"AAA" > "125"
, this statement is actuallyTrue
. And you get this message:Don't be stupid. You're not that old.
, which is irrelevant to the input. Age check will never work like that. Please do yourself a favour and turn onOption Strict On
, either on a per file basis, or project-wide. You will see how many places of your code have code smell.If you want to get working code, please describe in words (not code) what you want your code to do, and I'll try to come up with a code sample for you, following the best practices, so you can learn from it. And yeah, don't use
GoTo's
, there is hardly ever a need for it.