Visual Basic

  1. Home
  2. Computing & Technology
  3. Visual Basic

Source Code:

By Dan Mabbutt, About.com


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

Explore Visual Basic

By Category

About.com Special Features

Visual Basic

  1. Home
  2. Computing & Technology
  3. Visual Basic
  4. Using VB.NET
  5. CalcPad Using VB.NET Queue Objects

©2009 About.com, a part of The New York Times Company.

All rights reserved.