Public Class NewCalc
Inherits System.Windows.Forms.Form
Private Accum As String
Private NumQueue As New Queue
Private OpQueue As New Queue
#Region " Windows Form Designer generated code "
Private Sub op_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles opplus.Click, opminus.Click, _
opmult.Click, opdivide.Click
OpQueue.Enqueue(sender.tag)
NumQueue.Enqueue(Accum)
Accum = ""
End Sub
Private Sub opequals_Click( _
ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles opequals.Click
Dim CurrentOp As String
Dim Num1, Num2 As Double
NumQueue.Enqueue(Accum)
Try
Num1 = CDbl(NumQueue.Dequeue)
Num2 = CDbl(NumQueue.Dequeue)
Do
CurrentOp = OpQueue.Dequeue
Select Case CurrentOp
Case "Divide"
If Num2 <> 0 Then
Num1 /= CDbl(Num2)
Else
CalcPadDisplay.Text = _
"Divide By Zero"
Exit Sub
End If
Case "Multiply"
Num1 *= CDbl(Num2)
Case "Add"
Num1 += CDbl(Num2)
Case "Subtract"
Num1 -= CDbl(Num2)
End Select
If NumQueue.Count = 0 Then Exit Do
Num2 = NumQueue.Dequeue
Loop
CalcPadDisplay.Text = CStr(Num1)
Accum = ""
Catch
OpQueue.Clear()
NumQueue.Clear()
Accum = ""
CalcPadDisplay.Text = "0"
Exit Sub
End Try
End Sub
Private Sub keyClick( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles key1.Click, key2.Click, key3.Click, _
key4.Click, key5.Click, key6.Click, _
key7.Click, key8.Click, key9.Click, _
key0.Click, keydecimal.Click
If InStr(Accum, ".") <> 0 Then
Exit Sub
End If
If Len(Accum) = 0 Then
' First keypress
Accum = sender.tag
Else
' Second or later keypress
Accum &= sender.tag
End If
CalcPadDisplay.Text = Accum
End Sub
Private Sub opclear_Click( _
ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles opclear.Click, opclearentry.Click
CalcPadDisplay.Text = "0"
Accum = ""
If sender.tag = "Clear" Then
OpQueue.Clear()
NumQueue.Clear()
End If
End Sub
End Class

