本帖最后由 peter0317 于 2010-01-24 19:00:47 编辑

解决方案 »

  1.   

    Private Sub Command1_Click(Index As Integer)
    Static F As Integer
    Static v1 As Single
    Static v2 As Single
    Select Case Index
    Case 0 To 10
    Text1 = Text1 & Command1(Index).Caption
    Case 11 To 14
    v1 = Val(Text1)
    F = Index
    Text1 = ""
    Case 15
    v2 = Val(Text1)
    If F = 11 Then Text1.Text = v1 & "+" & v2 & "=" & v1 + v2If F = 12 Then Text1 = v1 & "-" & v2 & "=" & v1 - v2
    If F = 13 Then Text1 = v1 & "*" & v2 & "=" & v1 * v2
    If F = 14 Then Text1 = v1 & "/" & v2 & "=" & v1 / v2End SelectEnd SubPrivate Sub Form_Load()
    Dim I As Integer
    For I = 0 To Command1.UBound
    Select Case I
    Case 0 To 9
    Command1(I).Caption = I
    Case 10
    Command1(I).Caption = "."
    Case 11
    Command1(I).Caption = "+"
    Case 12
    Command1(I).Caption = "-"
    Case 13
    Command1(I).Caption = "*"
    Case 14
    Command1(I).Caption = "/"
    Case 15
    Command1(I).Caption = "="
    End Select
    Next
    Text1.Alignment = vbRightJustify
    Text1 = ""
    End Sub
      

  2.   

    Option Explicit
    Private StoredValue As Double
    Private Const opNone = 0
    Private Const opAdd = 1
    Private Const opSubtract = 2
    Private Const opMultiply = 3
    Private Const opDivide = 4
    Private Operator As Integer
    Private NewEntry As Boolean
     
    ' Remove the last character.
    Private Sub DeleteCharacter()
    Dim txt As String
    Dim min_len As Integer
      txt = txtDisplay.Text
      If Left$(txt, 1) = "-" Then
        min_len = 2
      Else
        min_len = 1
      End If
      
      If Len(txt) > min_len Then
        txtDisplay.Text = Left$(txt, Len(txt) - 1)
      Else
        txtDisplay.Text = "0"
      End If
    End Sub
     
     
    ' Clear the current entry.
    Private Sub cmdClearEntry_Click()
      txtDisplay.Text = ""
    End Sub
    ' Add a decimal point to the display.
    Private Sub cmdDecimal_Click()
      If InStr(txtDisplay.Text, ".") Then
        Beep
      Else
        If NewEntry Then
           txtDisplay.Text = "."
           NewEntry = False
        Else
           txtDisplay.Text = txtDisplay.Text & "."
        End If
      End If
    End Sub
     
    ' Calculate the result of the previous operation.
    Private Sub cmdEquals_Click()
    Dim new_value As Double
      If txtDisplay.Text = "" Then
        new_value = 0
      Else
        new_value = CDbl(txtDisplay.Text)
      End If
      Select Case Operator
        Case opNone
           StoredValue = new_value
        Case opAdd
           StoredValue = StoredValue + new_value
        Case opSubtract
           StoredValue = StoredValue - new_value
        Case opMultiply
           StoredValue = StoredValue * new_value
        Case opDivide
           StoredValue = StoredValue / new_value
      End Select
      Operator = opNone
      NewEntry = True
      txtDisplay.Text = Format$(StoredValue)
    End Sub
     
    ' Add a number to the display.
    Private Sub cmdNumber_Click(Index As Integer)
      If NewEntry Then
        txtDisplay.Text = Format$(Index)
        NewEntry = False
      Else
        txtDisplay.Text = _
           txtDisplay.Text & Format$(Index)
      End If
    End Sub
     
    ' Prepare to perform an operation.
    Private Sub cmdOperator_Click(Index As Integer)
      ' Perform the previous operation.
      cmdEquals_Click
      ' Remember this operation.
      Operator = Index
      ' Start a new value.
      NewEntry = True
    End Sub
     ' Change the value's sign.
    Private Sub cmdPlusMinus_Click()
      If NewEntry Then
        txtDisplay.Text = "-"
      ElseIf Left$(txtDisplay.Text, 1) = "-" Then
        txtDisplay.Text = Right$(txtDisplay.Text, 2)
      Else
        txtDisplay.Text = "-" & txtDisplay.Text
      End If
    End Sub
     
    ' Check for normal characters.
    Private Sub Form_KeyPress(KeyAscii As Integer)
      txtDisplay_KeyPress KeyAscii
    End Sub
    ' Check for unusual characters.
    Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
      txtDisplay_KeyUp KeyCode, Shift
    End Sub' Keep the cursor on the right.
    Private Sub txtDisplay_Change()
      txtDisplay.SelStart = Len(txtDisplay.Text)
    End Sub
     
    ' Keep the cursor on the right.
    Private Sub txtDisplay_GotFocus()
      txtDisplay_Change
    End Sub' Check for normal characters.
    Private Sub txtDisplay_KeyPress(KeyAscii As Integer)
    Dim ch As String
      ch = Chr$(KeyAscii)
      Select Case ch
        Case "0"
           cmdNumber_Click 0
        Case "1"
           cmdNumber_Click 1
        Case "2"
           cmdNumber_Click 2
        Case "3"
           cmdNumber_Click 3
        Case "4"
           cmdNumber_Click 4
        Case "5"
           cmdNumber_Click 5
        Case "6"
           cmdNumber_Click 6
        Case "7"
           cmdNumber_Click 7
        Case "8"
           cmdNumber_Click 8
        Case "9"
           cmdNumber_Click 9
        Case "*", "x", "X"
           cmdOperator_Click opMultiply
        Case "+"
           cmdOperator_Click opAdd
        Case vbCrLf, vbCr, "="
           cmdEquals_Click
        Case "-"
           cmdOperator_Click opSubtract
        Case "."
           cmdDecimal_Click
        Case "/"
           cmdOperator_Click opDivide
        Case "C", "c"
           cmdClearEntry_Click
      End Select
      KeyAscii = 0
    End Sub
     
    ' Check for unusual characters.
    Private Sub txtDisplay_KeyUp(KeyCode As Integer, Shift As Integer)
      Select Case KeyCode
        Case vbKeyNumpad0
           cmdNumber_Click 0
        Case vbKeyNumpad1
           cmdNumber_Click 1
        Case vbKeyNumpad2
           cmdNumber_Click 2
        Case vbKeyNumpad3
           cmdNumber_Click 3
        Case vbKeyNumpad4
           cmdNumber_Click 4
        Case vbKeyNumpad5
           cmdNumber_Click 5
        Case vbKeyNumpad6
           cmdNumber_Click 6
        Case vbKeyNumpad7
           cmdNumber_Click 7
        Case vbKeyNumpad8
           cmdNumber_Click 8
        Case vbKeyNumpad9
           cmdNumber_Click 9
        Case vbKeyMultiply
           cmdOperator_Click opMultiply
        Case vbKeyAdd
           cmdOperator_Click opAdd
        Case vbKeySeparator
           cmdEquals_Click
        Case vbKeySubtract
           cmdOperator_Click opSubtract
        Case vbKeyDecimal
           cmdDecimal_Click
        Case vbKeyDivide
           cmdOperator_Click opDivide
        Case vbKeyBack, vbKeyDelete
           DeleteCharacter
      End Select
      KeyCode = 0
    End Sub