‘加 减 乘 除 等于的按下的事件
Private Sub Operator_Click(Index As Integer)
TempReadout=Readout
‘纠结一下,不保存,可不可以?备份值是赋给操作数的。根据机制,当
‘NumOps=2时,屏显的正是操作数,这时同样Op2=Readout不就可以了吗?
If LastInput=”NUMS” Then
NumOps=NumOps+1
End If
‘如果上次按下是数字键,则操作数的个数+1.例如按了”3”,又按”+”,就会
‘执行上面的语句.由于程序的运行与LastInput相关,所以你狂输操作符
‘则亦只有最后输入的为有效,作者于编程,斯可为匠心独运也矣!
Select Case NumOps
Case 0
If Operator(Index).Caption=”-“ And LastInput<>”NEG” Then
Readout=”-“&Readout
LastInput=”NEG”
End If
‘如果本次按的是负号(减号)而上次不是,则将屏显的数取相反数.Case 0
‘又是什么情况呢?1,初态,2,只按数字键或只按操作键,即按数字键再按”-“则
‘取相反数;按非负号的其它操作键再按”-“,则亦取相反数.连续多次按”-“,
‘则最先按的那个有效,没有负负得正的效果.
‘初始状态,按其它操作符,均属无效操作,只有按负号是除外
Case 1
Op1=Readout
‘先保存屏显,根据机制,这以后输数,屏幕会先显示”.”,所以
‘保存操作是很有必要的。看前面的讨论,由于TempReadout
‘与Readout是如影之随形的东西,同生同灭,备份保存的意义
‘又何在呢?
If Operator(Index).Caption=”-“ And LastInput<>”NUMS” _
And OpFlag<>”=” Then
Readout=”-“
LastInput=”NEG”
End If
‘依前面的讨论,”数字”然后”操作符”,满足Case 1,则LastInput怎么可能不是
‘数字呢?肯定是,何必判断呢?OpFlag保存着上一次的操作键的按键类型,于本
‘次的计算并不直接相关,为何仍要判断?这里,我不仅仅是纠结,而是直接崩
‘溃了,其妙用安在?安在哉?
Case 2 ‘ ”数字”->”操作符”->”数字”,然后再”操作符”,执行至此
Op2=TempReadout ‘TempReadout与Readout恒相等,不知备份意义何在?
Select Case Opflag ‘先取用,后赋值,可见它是上一个操作键事件的操作类型
Case “+” ‘勿须冒号,与C不同,注意
Op1=CDbl(Op1)+CDbl(Op2)
‘用Op1在屏上显示.它是被操作数,而Op2是操作数.
‘作者编程,其思维精细而巧妙,非是寻常屐齿,可轻易造也.
Case “-”
Op1=CDbl(Op1)-CDbl(Op2)
Case “X”
Op1=CDbl(Op1)*CDbl(Op2)
Case “/”
If Op2=0 Then
MsgBox”除数不能为0”,48,”计算器”
Else
Op1=CDbl(Op1)/CDbl(Op2)
End If
Case “=”
Op1= CDbl(Op2) ‘ “3” “=” “5” “+”,结果为”5”,这就清楚了.
End Select
Readout=Op1 ‘将被操作数送显,绾合矣
NumOps=1
‘被操作数变为得数,对于连续运算,得数又变为被操作数,妙到颠
’毫,诗一样的清丽,圆融精巧,起承转合,荡荡莫名矣!
End Select
If LastInput<>”NEG” Then
LastInput=”Ops”
OpFlag=Operator(Index).Caption
End If
End Sub
(The End) |