I need to create a calculator using combo boxes/procedures/functions etc... and some other stuff. most of it works properly, but, i need to create a user defined function that checks if both input numbers of the calculation are in fact numbers (isnumeric). the function must check both numbers, display a message box and return a value. but it crashes every time i test it - like putting in a letter instead of a number. any help would be great,
here's my code so far: (first function is the one malfunctioning)
Public Class form1
Function checknumber(ByV al num1 As String, ByVal num2 As String) As Boolean
If Not IsNumeric(num1) Then
MsgBox("Input must be a number.")
ElseIf Not IsNumeric(num2) Then
MsgBox("Input must be a number.")
Return False
End If
End Function
Sub rounding(ByVal roundnum As Double)
If txtRound.Enable d = True Then
txtResult.Text = FormatNumber(tx tResult.Text, roundnum)
End If
End Sub
Private Sub btnEquals_Click (ByVal sender As System.Object, ByVal e As System.EventArg s) Handles btnEquals.Click
Dim num1, num2, roundnum As Double
num1 = txtNum1.Text
num2 = txtNum2.Text
roundnum = txtRound.Text
If cmbOperation.Te xt = "Addition" Then
'calculate result
addition(num1, num2)
End If
If cmbOperation.Te xt = "Subtractio n" Then
'calculate result
subtraction(num 1, num2)
End If
If cmbOperation.Te xt = "Multiplication " Then
'calculate result
multiplication( num1, num2)
End If
If cmbOperation.Te xt = "Division" Then
'calculate result
division(num1, num2)
End If
If cmbOperation.Te xt = "Mod" Then
'calculate result
modular(num1, num2)
End If
If cmbOperation.Te xt = "Exponentiation " Then
'calculate result
exponentiate(nu m1, num2)
End If
'validate operation
If cmbOperation.Te xt = "" Then
MsgBox("no operation is selected.")
End If
End Sub
Sub addition(ByVal num1 As Double, ByVal num2 As Double)
checknumber(num 1, num2)
txtResult.Text = (num1 + num2)
'build list
lstResults.Item s.Add(txtResult .Text)
End Sub
Sub subtraction(ByV al num1 As Double, ByVal num2 As Double)
txtResult.Text = num1 - num2
'build list
lstResults.Item s.Add(txtResult .Text)
End Sub
Sub multiplication( ByVal num1 As Double, ByVal num2 As Double)
txtResult.Text = num1 * num2
'build list
lstResults.Item s.Add(txtResult .Text)
End Sub
Sub division(ByVal num1 As Double, ByVal num2 As Integer)
'validate input
If num2 = 0 Then
MsgBox("Number 2 cannot be 0.")
Exit Sub
End If
txtResult.Text = num1 / num2
'build list
lstResults.Item s.Add(txtResult .Text)
End Sub
Sub modular(ByVal num1 As Double, ByVal num2 As Double)
'validate input
If num2 = 0 Then
MsgBox("Number 2 cannot be 0.")
Exit Sub
End If
txtResult.Text = num1 Mod num2
'build list
lstResults.Item s.Add(txtResult .Text)
End Sub
Sub exponentiate(By Val num1 As Double, ByVal num2 As Double)
'validate input
If num1 = 0 And num2 < 0 Then
MsgBox("input is invalid.")
Exit Sub
End If
txtResult.Text = num1 ^ num2
'build list
lstResults.Item s.Add(txtResult .Text)
End Sub
Private Sub btnClear_Click( ByVal sender As System.Object, ByVal e As System.EventArg s) Handles btnClear.Click
lstResults.Item s.Clear()
txtNum1.Text = ""
txtNum2.Text = ""
txtRound.Text = ""
txtResult.Text = ""
cmbOperation.Te xt = ""
radRound.Checke d = False
End Sub
Private Sub radRound_Checke dChanged(ByVal sender As System.Object, ByVal e As System.EventArg s) Handles radRound.Checke dChanged
'disable rounding option unless user wants to round
If radRound.Checke d = True Then
'allow user to round
txtRound.Enable d = True
Else
'do not allow rounding
txtRound.Enable d = False
End If
End Sub
Private Sub lstResults_Sele ctedIndexChange d(ByVal sender As System.Object, ByVal e As System.EventArg s) Handles lstResults.Sele ctedIndexChange d
If lstResults.Sele ctedIndex >= 0 Then
If MsgBox("Use this number in the calculation?", MsgBoxStyle.Yes No) = MsgBoxResult.Ye s Then
txtNum1.Text = lstResults.Text
End If
End If
If lstResults.Sele ctedIndex = -1 Then
MsgBox("no number is selected.")
Exit Sub
End If
End Sub
End Class
here's my code so far: (first function is the one malfunctioning)
Public Class form1
Function checknumber(ByV al num1 As String, ByVal num2 As String) As Boolean
If Not IsNumeric(num1) Then
MsgBox("Input must be a number.")
ElseIf Not IsNumeric(num2) Then
MsgBox("Input must be a number.")
Return False
End If
End Function
Sub rounding(ByVal roundnum As Double)
If txtRound.Enable d = True Then
txtResult.Text = FormatNumber(tx tResult.Text, roundnum)
End If
End Sub
Private Sub btnEquals_Click (ByVal sender As System.Object, ByVal e As System.EventArg s) Handles btnEquals.Click
Dim num1, num2, roundnum As Double
num1 = txtNum1.Text
num2 = txtNum2.Text
roundnum = txtRound.Text
If cmbOperation.Te xt = "Addition" Then
'calculate result
addition(num1, num2)
End If
If cmbOperation.Te xt = "Subtractio n" Then
'calculate result
subtraction(num 1, num2)
End If
If cmbOperation.Te xt = "Multiplication " Then
'calculate result
multiplication( num1, num2)
End If
If cmbOperation.Te xt = "Division" Then
'calculate result
division(num1, num2)
End If
If cmbOperation.Te xt = "Mod" Then
'calculate result
modular(num1, num2)
End If
If cmbOperation.Te xt = "Exponentiation " Then
'calculate result
exponentiate(nu m1, num2)
End If
'validate operation
If cmbOperation.Te xt = "" Then
MsgBox("no operation is selected.")
End If
End Sub
Sub addition(ByVal num1 As Double, ByVal num2 As Double)
checknumber(num 1, num2)
txtResult.Text = (num1 + num2)
'build list
lstResults.Item s.Add(txtResult .Text)
End Sub
Sub subtraction(ByV al num1 As Double, ByVal num2 As Double)
txtResult.Text = num1 - num2
'build list
lstResults.Item s.Add(txtResult .Text)
End Sub
Sub multiplication( ByVal num1 As Double, ByVal num2 As Double)
txtResult.Text = num1 * num2
'build list
lstResults.Item s.Add(txtResult .Text)
End Sub
Sub division(ByVal num1 As Double, ByVal num2 As Integer)
'validate input
If num2 = 0 Then
MsgBox("Number 2 cannot be 0.")
Exit Sub
End If
txtResult.Text = num1 / num2
'build list
lstResults.Item s.Add(txtResult .Text)
End Sub
Sub modular(ByVal num1 As Double, ByVal num2 As Double)
'validate input
If num2 = 0 Then
MsgBox("Number 2 cannot be 0.")
Exit Sub
End If
txtResult.Text = num1 Mod num2
'build list
lstResults.Item s.Add(txtResult .Text)
End Sub
Sub exponentiate(By Val num1 As Double, ByVal num2 As Double)
'validate input
If num1 = 0 And num2 < 0 Then
MsgBox("input is invalid.")
Exit Sub
End If
txtResult.Text = num1 ^ num2
'build list
lstResults.Item s.Add(txtResult .Text)
End Sub
Private Sub btnClear_Click( ByVal sender As System.Object, ByVal e As System.EventArg s) Handles btnClear.Click
lstResults.Item s.Clear()
txtNum1.Text = ""
txtNum2.Text = ""
txtRound.Text = ""
txtResult.Text = ""
cmbOperation.Te xt = ""
radRound.Checke d = False
End Sub
Private Sub radRound_Checke dChanged(ByVal sender As System.Object, ByVal e As System.EventArg s) Handles radRound.Checke dChanged
'disable rounding option unless user wants to round
If radRound.Checke d = True Then
'allow user to round
txtRound.Enable d = True
Else
'do not allow rounding
txtRound.Enable d = False
End If
End Sub
Private Sub lstResults_Sele ctedIndexChange d(ByVal sender As System.Object, ByVal e As System.EventArg s) Handles lstResults.Sele ctedIndexChange d
If lstResults.Sele ctedIndex >= 0 Then
If MsgBox("Use this number in the calculation?", MsgBoxStyle.Yes No) = MsgBoxResult.Ye s Then
txtNum1.Text = lstResults.Text
End If
End If
If lstResults.Sele ctedIndex = -1 Then
MsgBox("no number is selected.")
Exit Sub
End If
End Sub
End Class
Comment