Public Class Form1
Dim Flag As Boolean = False
Dim Operazione As String = ""
Dim A As Double = 0
Dim B As Double = 0
Dim Risultato As Double = 0
Function Calcolo(ByVal OP As String, ByVal a As Double, Optional ByVal b As Double = 0) As Double
Select Case OP
Case "+"
Calcolo = a + b
Case "/"
Calcolo = a / b
Case "*"
Calcolo = a * b
Case "-"
Calcolo = a - b
Case "sqrt"
Calcolo = System.Math.Sqrt(a)
Case "LN"
Calcolo = System.Math.Log(a)
Case "^2"
Calcolo = a * a
End Select
End Function
Private Sub cmd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_0.Click, Cmd_1.Click, Cmd_2.Click, Cmd_3.Click, Cmd_4.Click, Cmd_5.Click, Cmd_6.Click, Cmd_7.Click, Cmd_8.Click, Cmd_9.Click, Cmd_Delete.Click, Cmd_divisione.Click, Cmd_Moltiplicazione.Click, Cmdquad.Click, Cmd_LN.Click, Cmd_pn.Click, Cmd_risultato.Click, Cmd_Somma.Click, Cmd_Sottrazione.Click, Cmd_sqrt.Click, Cmd_Virgola.Click
'controllo tramite Instr() per aggiungere la virgola
If sender Is Cmd_Virgola Then
If InStr(txtcalc.Text, ",") = 0 Then
txtcalc.Text = txtcalc.Text & ","
End If
End If
' Cambia segno
If sender Is Cmd_pn Then
If txtcalc.Text <> "" Then
txtcalc.Text = CDbl(txtcalc.Text) * (-1)
End If
End If
'######
If Not IsNumeric(sender.text) And Not Flag Then
If sender.text = "sqrt" Or sender.text = "LN" Or sender.text = "^2" And IsNumeric(txtcalc.Text) Then
If sender.text = "^2" Then
Risultato = Calcolo(sender.text, CInt(txtcalc.Text))
txtcalc.Text = Risultato.ToString
Exit Sub
End If
If CInt(txtcalc.Text) < 0 Then
txtcalc.Text = "Valore non valido"
End If
If txtcalc.Text <> "Valore non valido" Then
Risultato = Calcolo(sender.text, CInt(txtcalc.Text))
txtcalc.Text = Risultato.ToString
End If
End If
If sender.text = "/" Or sender.text = "*" Or sender.text = "+" Or sender.text = "-" Then
If txtcalc.Text <> "" Then
Flag = True
Operazione = sender.text
A = CDbl(txtcalc.Text)
txtcalc.Text = ""
txtcalc.Focus()
Exit Sub
Else
Exit Sub
End If
End If
ElseIf Not Flag And IsNumeric(sender.text) Then
txtcalc.Text = txtcalc.Text & sender.text
Exit Sub
End If
If Not IsNumeric(sender.text) And Flag Then
If sender.text = "=" Then
Flag = False
B = CDbl(txtcalc.Text)
Risultato = Calcolo(Operazione, A, B)
txtcalc.Text = Risultato.ToString 'cast
End If
ElseIf Flag Then
txtcalc.Text = txtcalc.Text & sender.text
End If
If sender Is Cmd_Delete Then
With txtcalc
.Text = ""
.Focus()
End With
End If
End Sub
End Class