Option Explicit
Dim dblN(0 To
1) As Double '用于计算的数
Dim dblM As Double '记忆数值
Dim blnP As Boolean '小数点
Dim bytY As Byte '运算符
Private Sub cmdCE1_Click() ...'清除输入的最后一个键
Me.Text1.Text = dblN
(1)
dblN
(
1) = CDbl(Left(Me.Text1.Text, Len(Me.Text1.Text) - 1))
Me.Text1.Text = dblN
(1)
End Sub
Private Sub cmdCE_Click() '清除输入的这个数值
dblN
(1) = 0
Me.Text1.Text = dblN
(1)
End Sub
Private Sub cmdCELast_Click()
Me.Text1.Text = dblN
(1)
If Len(Me.Text1.Text) = 1 Then
dblN
(1) = 0
Else
dblN
(
1) = CDbl(Left(Me.Text1.Text, Len(Me.Text1.Text) - 1))
End If
Me.Text1.Text = dblN
(1)
End Sub
Private Sub cmdE_Click() '计算结果
On Error GoTo err
Select Case bytY
Case Is = 0
dblN(0) = dblN(0) + dblN
(1)
Case Is = 1
dblN(0) = dblN(0) - dblN
(1)
Case Is = 2
dblN(0) = dblN(0) * dblN
(1)
Case Is = 3
dblN(0) = dblN(0) / dblN
(1)
End Select
Me.Text1.Text = dblN(0)
If Left(Me.Text1.Text,
1) = "." Then Me.Text1.Text = "0" + Me.Text1.Text
bytY = 0
dblN
(1) = 0
blnP = False
Exit Sub
err:
Me.Text1.Text = "错误:" & Error(err.Number)
bytY = 0
dblN
(1) = 0:
dblN(0) = 0
blnP = False
End Sub
Private Sub cmdN_Click(Index As Integer) '数字输入
If Not blnP Then
dblN
(1) = dblN(1) * 10 + Index
Else
If InStr(CStr(dblN
(1)), ".") > 0 Then
dblN
(1) = Val(CStr(dblN(1)) + CStr(Index))
Else
dblN
(1) = dblN(1) + Index / 10
End If
End If
Me.Text1.Text = dblN
(1)
If Left(Me.Text1.Text,
1) = "." Then Me.Text1.Text = "0" + Me.Text1.Text
End Sub
Private Sub cmdP_Click() '小数点输入
blnP = True
End Sub
Private Sub cmdY_Click(Index As Integer) '运算符输入
Call cmdE_Click
bytY = Index
End Sub
Private Sub cmdC_Click() '归零
bytY = 0
dblN
(1) = 0:
dblN(0) = 0
blnP = False
Me.Text1.Text = dblN
(1)
End Sub
Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
'处理键盘输入数值
Select Case KeyCode
Case 96 To 105, 48 To 57
If Shift = 0 Then Call cmdN_Click(KeyCode - IIf(KeyCode >= 96, 96, 48)) '数字输入
If Shift = 1 And KeyCode = 56 Then Call cmdY_Click
(2) '大键盘上档 *
Case 110, 190 '小数点
If Shift = 0 Then Call cmdP_Click
Case Is = 107, 187 '+
Call cmdY_Click(0)
Case 109, 189 '-
Call cmdY_Click
(1)
Case Is = 106 '小键盘 *
Call cmdY_Click
(2)
Case 111, 191 '/
Call cmdY_Click(3)
Case Is = 13 '回车(=)
Call cmdE_Click
Case Is = 187
If Shift = 1 Then
Call cmdY_Click(0) '大键盘上档 +
Else
Call cmdE_Click '大键盘 =
End If
Case Is = 27 'C
Call cmdC_Click
End Select
End Sub
Private Sub Text1_Validate(Cancel As Boolean) '焦点一直在text1
Me.Text1.SetFocus
End Sub