新手求教!关于VB制作计算器的问题
怎么实现累加(减),累乘(除)的功能?
2016-09-05 12:50

2016-09-05 13:31
2016-09-05 13:48
2016-09-05 16:14
2016-09-05 21:14
程序代码:
Dim num1, num2 as string '第一和第二运算数
Dim operater as integer '运算符
Dim opr as boolean '存放是否刚按过运算符
Dim cal as boolean '存放是否已经执行完计算
Sub CommandCE_Click ()
num1=""
num2=""
operater =-1 '初始化,0~3留给运算符,取0~3之外的就可以
opr =false
cal =false
End sub
'当按下数字键:Index与数字从0到9一一对应
sub CommandNum_Click(Index As Integer) '若非控件数组,这个函数拆开到各数组键对应的Click事件中
if opr then '如果刚按过运算符,输入的应该是新数字,将文本框textnum清空
textnum.text=""
opr =false '修改变量
End if
nums=textnum.text
textnum.text=cdbl(nums & Index) '输入的数直接在原数字后
'可能显示或者其他的,还需要一些代码。 酌情增加
End sub
'按下小数点
sub CommandDot_Click()
if opr or cal then '如果刚按过运算符或者=,输入的应该是新数字,将文本框textnum清空
textnum.text=""
opr =false '修改变量
cal=false
End if
if instr(textnum.text,".") then exit sub ’ 数字中已经有“.”
textnum.text=cdbl(nums & ".") '直接在原数字后加 “.”
'可能显示或者其他的,还需要一些代码。 酌情增加
End sub
'按下运算符: 同样是控件数组,0~3 分别对应+、-、*、/
Sub CommandOpr_click(Index As Integer)
if not cal And num1<>"" and num2<>"" and (operater >=0 and operater <=3) then
CommandEq_Click '当前面的运算未完成时, 例如: 1+3 (没有按等号) +2, 先计算1+3
End if
num1=Getnum(text1.text)
operater =index
opr =ture
cal=false
End sub
'按下=
Sub CommandEQ_Click()
if operater <0 and operater >3 then exit sub '没有按下运算符时,不执行
if opr then exit sub '按下运算符时,但是未输入第二个运算数字时,不执行
if cal then '当连续点=时,textnum.text取出的放在num1, 保留原来的num2。 例: 3+1===== 相当于3+1+1+1+1
num1= getnum(textnum.text)
else 如果不是连续的点击=, textnum.text取出的放在num2(num1在点击运算符的时候已经读入了)
num1= getnum(textnum.text)
End if
’执行运算
if num1<>"" and num2<>"" then
Select case operater
case 0
text.num1=cdbl(num1)+cdbl(num2)
case 1
text.num1=cdbl(num1)-cdbl(num2)
case 2
text.num1=cdbl(num1)*cdbl(num2)
case 3
on error resume next
text.num1=cdbl(num1)/cdbl(num2)
if err then
err.clear
msgbox "除数为零,强制重置"
CommandCE_Click '强制重置
End if
End Select
End if
cal=true
End Sub
Function Getnum(a as string) as String
if a="" Or a="."then '将无法转换为数值型的进行处理一下
Getnum="0"
Else
Getnum=a
End if
End Function
[此贴子已经被作者于2016-9-6 10:54编辑过]
2016-09-06 10:50
2016-09-06 10:56
2016-09-06 14:16
2016-09-06 18:25
2016-09-10 10:00