vb.netmathequations

Basic math functions in VB.net


So i am currently in process of adding a basic calculator that allows the user to define 2 variables and then press a button that puts the variables into a basic math equation and presents the result but i think i have gone about it completely wrong.

this is my first time using math functions in VB and would appreciate it if someone can show me where im going wrong.

this is my code so far:

Imports System.Math
Public Class SOGACALC
Dim soga As String = Math.Abs(72 - months.Text) * opp.Text
Private Sub SOGACALC_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    SOGAValue.Text = soga
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    HOME.Show()
    Me.Close()
End Sub

End Class

Solution

  • Where you have written

    Dim soga As String = Math.Abs(72 - months.Text) * opp.Text
    

    I suspect that you are anticipating that soga will be a function of the properties referred to in that and will change when those properties change. It does not work that way.

    The way to get a value which varies depending on its parameters is to define a function, so you might have:

    Friend Function Soga(monthValue As Control, oppThing As Control) As String
        Dim month As Integer = CInt(monthValue.Text)
        Dim opp As Decimal = CDec(oppThing.Text)
    
        Return (Math.Abs(72 - month) * opp).ToString()
    
    End Function
    

    and call it like:

    'TODO: Give Button1 a meaningful name.
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        SOGAValue.Text = Soga(months, opp)
    End Sub
    

    where there are controls names "months" and "opp" on the form.

    I strongly recommnend that you use Option Strict On - it points out problems in code and suggests corrections for you.

    Notice that I used the Decimal type for opp - I had to guess at a suitable type because nowhere in the code you showed us was there any indication of what type it needs to be.

    An improvement would be to use TryParse methods instead of CInt/CDec, so that you can inform the user if they have made a simple typing error.