如题所述
第1个回答 2019-10-17
Option
Explicit
Dim
Op1,
Op2
'
预先输入操作数。
Dim
DecimalFlag
As
Integer
'
小数点存在吗?
Dim
NumOps
As
Integer
'
操作数个数。
Dim
LastInput
'
指示上一次按键事件的类型。
Dim
OpFlag
'
指示未完成的操作。
Dim
TempReadout
'
C
(取消)
按钮的
Click
事件过程
'
重新设置显示并初始化变量。
Private
Sub
Cancel_Click()
Readout
=
Format(0,
"0.")
Op1
=
0
Op2
=
0
Form_Load
End
Sub
'
CE
(取消输入)
按钮的
Click
事件过程。
Private
Sub
CancelEntry_Click()
Readout
=
Format(0,
"0.")
DecimalFlag
=
False
LastInput
=
"CE"
End
Sub
'
小数点
(.)
按钮的
Click
事件过程
'
如果上一次按键为运算符,初始化
readout
为
"0.";
'
否则显示时追加一个小数点。
Private
Sub
Decimal_Click()
If
LastInput
=
"NEG"
Then
Readout
=
Format(0,
"-0.")
ElseIf
LastInput
<>
"NUMS"
Then
Readout
=
Format(0,
"0.")
End
If
DecimalFlag
=
True
LastInput
=
"NUMS"
End
Sub
'
窗体的初始化过程
'
设置所有变量为其初始值。
Private
Sub
Form_Load()
DecimalFlag
=
False
NumOps
=
0
LastInput
=
"NONE"
OpFlag
=
"
"
Readout
=
Format(0,
"0.")
'Decimal.Caption
=
Format(0,
".")
End
Sub
'
数字键
(0-9)
的
Click
事件过程
'
向显示中的数追加新数。
Private
Sub
Number_Click(Index
As
Integer)
If
LastInput
<>
"NUMS"
Then
Readout
=
Format(0,
".")
DecimalFlag
=
False
End
If
If
DecimalFlag
Then
Readout
=
Readout
+
Number(Index).Caption
Else
Readout
=
Left(Readout,
InStr(Readout,
Format(0,
"."))
-
1)
+
Number(Index).Caption
+
Format(0,
".")
End
If
If
LastInput
=
"NEG"
Then
Readout
=
"-"
&
Readout
LastInput
=
"NUMS"
End
Sub
'
运算符
(+,
-,
x,
/,
=)
的
Click
事件过程
'
如果接下来的按键是数字键,增加
NumOps。
'
如果有一个操作数,则设置
Op1。
'
如果有两个操作数,则将
Op1
设置为
Op1
与
'
当前输入字符串的运算结果,并显示结果。
Private
Sub
Operator_Click(Index
As
Integer)
TempReadout
=
Readout
If
LastInput
=
"NUMS"
Then
NumOps
=
NumOps
+
1
End
If
Select
Case
NumOps
Case
0
If
Operator(Index).Caption
=
"-"
And
LastInput
<>
"NEG"
Then
Readout
=
"-"
&
Readout
LastInput
=
"NEG"
End
If
Case
1
Op1
=
Readout
If
Operator(Index).Caption
=
"-"
And
LastInput
<>
"NUMS"
And
OpFlag
<>
"="
Then
Readout
=
"-"
LastInput
=
"NEG"
End
If
Case
2
Op2
=
TempReadout
Select
Case
OpFlag
Case
"+"
Op1
=
CDbl(Op1)
+
CDbl(Op2)
Case
"-"
Op1
=
CDbl(Op1)
-
CDbl(Op2)
Case
"X"
Op1
=
CDbl(Op1)
*
CDbl(Op2)
Case
"/"
If
Op2
=
0
Then
MsgBox
"除数不能为零",
48,
"计算器"
Else
Op1
=
CDbl(Op1)
/
CDbl(Op2)
End
If
Case
"="
Op1
=
CDbl(Op2)
Case
"%"
Op1
=
CDbl(Op1)
*
CDbl(Op2)
End
Select
Readout
=
Op1
NumOps
=
1
End
Select
If
LastInput
<>
"NEG"
Then
LastInput
=
"OPS"
OpFlag
=
Operator(Index).Caption
End
If
End
Sub
'
百分比键
(%)
的
Click
事件过程
'
计算并显示第一个操作数的百分数。
Private
Sub
Percent_Click()
Readout
=
Readout
/
100
LastInput
=
"Ops"
OpFlag
=
"%"
NumOps
=
NumOps
+
1
DecimalFlag
=
True
End
Sub
Explicit
Dim
Op1,
Op2
'
预先输入操作数。
Dim
DecimalFlag
As
Integer
'
小数点存在吗?
Dim
NumOps
As
Integer
'
操作数个数。
Dim
LastInput
'
指示上一次按键事件的类型。
Dim
OpFlag
'
指示未完成的操作。
Dim
TempReadout
'
C
(取消)
按钮的
Click
事件过程
'
重新设置显示并初始化变量。
Private
Sub
Cancel_Click()
Readout
=
Format(0,
"0.")
Op1
=
0
Op2
=
0
Form_Load
End
Sub
'
CE
(取消输入)
按钮的
Click
事件过程。
Private
Sub
CancelEntry_Click()
Readout
=
Format(0,
"0.")
DecimalFlag
=
False
LastInput
=
"CE"
End
Sub
'
小数点
(.)
按钮的
Click
事件过程
'
如果上一次按键为运算符,初始化
readout
为
"0.";
'
否则显示时追加一个小数点。
Private
Sub
Decimal_Click()
If
LastInput
=
"NEG"
Then
Readout
=
Format(0,
"-0.")
ElseIf
LastInput
<>
"NUMS"
Then
Readout
=
Format(0,
"0.")
End
If
DecimalFlag
=
True
LastInput
=
"NUMS"
End
Sub
'
窗体的初始化过程
'
设置所有变量为其初始值。
Private
Sub
Form_Load()
DecimalFlag
=
False
NumOps
=
0
LastInput
=
"NONE"
OpFlag
=
"
"
Readout
=
Format(0,
"0.")
'Decimal.Caption
=
Format(0,
".")
End
Sub
'
数字键
(0-9)
的
Click
事件过程
'
向显示中的数追加新数。
Private
Sub
Number_Click(Index
As
Integer)
If
LastInput
<>
"NUMS"
Then
Readout
=
Format(0,
".")
DecimalFlag
=
False
End
If
If
DecimalFlag
Then
Readout
=
Readout
+
Number(Index).Caption
Else
Readout
=
Left(Readout,
InStr(Readout,
Format(0,
"."))
-
1)
+
Number(Index).Caption
+
Format(0,
".")
End
If
If
LastInput
=
"NEG"
Then
Readout
=
"-"
&
Readout
LastInput
=
"NUMS"
End
Sub
'
运算符
(+,
-,
x,
/,
=)
的
Click
事件过程
'
如果接下来的按键是数字键,增加
NumOps。
'
如果有一个操作数,则设置
Op1。
'
如果有两个操作数,则将
Op1
设置为
Op1
与
'
当前输入字符串的运算结果,并显示结果。
Private
Sub
Operator_Click(Index
As
Integer)
TempReadout
=
Readout
If
LastInput
=
"NUMS"
Then
NumOps
=
NumOps
+
1
End
If
Select
Case
NumOps
Case
0
If
Operator(Index).Caption
=
"-"
And
LastInput
<>
"NEG"
Then
Readout
=
"-"
&
Readout
LastInput
=
"NEG"
End
If
Case
1
Op1
=
Readout
If
Operator(Index).Caption
=
"-"
And
LastInput
<>
"NUMS"
And
OpFlag
<>
"="
Then
Readout
=
"-"
LastInput
=
"NEG"
End
If
Case
2
Op2
=
TempReadout
Select
Case
OpFlag
Case
"+"
Op1
=
CDbl(Op1)
+
CDbl(Op2)
Case
"-"
Op1
=
CDbl(Op1)
-
CDbl(Op2)
Case
"X"
Op1
=
CDbl(Op1)
*
CDbl(Op2)
Case
"/"
If
Op2
=
0
Then
MsgBox
"除数不能为零",
48,
"计算器"
Else
Op1
=
CDbl(Op1)
/
CDbl(Op2)
End
If
Case
"="
Op1
=
CDbl(Op2)
Case
"%"
Op1
=
CDbl(Op1)
*
CDbl(Op2)
End
Select
Readout
=
Op1
NumOps
=
1
End
Select
If
LastInput
<>
"NEG"
Then
LastInput
=
"OPS"
OpFlag
=
Operator(Index).Caption
End
If
End
Sub
'
百分比键
(%)
的
Click
事件过程
'
计算并显示第一个操作数的百分数。
Private
Sub
Percent_Click()
Readout
=
Readout
/
100
LastInput
=
"Ops"
OpFlag
=
"%"
NumOps
=
NumOps
+
1
DecimalFlag
=
True
End
Sub