option explicit
dim strnumber as string
dim strpoint as string
dim dblnum1 as double
dim intoperator as integer
'清除结果
private sub cmdgt_click()
txtdisplay.text = "0."
strnumber = ""
strpoint = "."
intoperator = 7
end sub
'输入数字
private sub cmdnumber_click(index as integer)
strnumber = strnumber & cmdnumber(index).caption
txtdisplay.text = strnumber & strpoint
end sub
private sub cmdonoff_click()
end
end sub
'运算过程
private sub cmdoperator_click(index as integer)
dim dblnum2 as double
'是第一次单击运算符时,将输入的值先赋给第一个数,否则赋值给第二个数进行运算
if intoperator = 7 then
dblnum1 = cdbl(txtdisplay.text)
else
dblnum2 = cdbl(val(txtdisplay.text))
'根据输入的符号进行运算
'求普通运算
select case intoperator
case 0
dblnum1 = dblnum1 + dblnum2
case 1
dblnum1 = dblnum1 - dblnum2
case 2
dblnum1 = dblnum1 * dblnum2
case 3
if dblnum2 <> 0 then
dblnum1 = dblnum1 / dblnum2
else
msgbox "除数不能为“0”!请重新输入除数。", vbokonly + vbinformation, "除零错误"
index = intoperator
end if
case 6
dblnum1 = dblnum1 * dblnum2 / 100
end select
end if
'取得当前输入的运算符,以做下次运算
intoperator = index
strnumber = ""
txtdisplay = cstr(dblnum1)
'判断是否为文本框中的数字加点
if not txtdisplay like "*.*" then
txtdisplay.text = txtdisplay.text & "."
end if
end sub
private sub cmdotheroper_click(index as integer)
dim dblnum as double
'求平方根,平方,
dblnum = cdbl(val(txtdisplay.text))
select case index
case 0
'验证数据是否有效
if dblnum >= 0 then
txtdisplay.text = cstr(sqr(dblnum))
else
msgbox "负数不能开平方根!", _
vbokonly + vbcritical, "开平方根错误"
end if
case 1
txtdisplay.text = cstr(dblnum ^ 2)
end select
'判断是否为文本框中的数字加点
if not txtdisplay like "*.*" then
txtdisplay.text = txtdisplay.text & "."
end if
end sub
private sub cmdpoint_click()
strnumber = strnumber & strpoint
strpoint = ""
end sub
private sub form_keydown(keycode as integer, shift as integer)
'使被按下的数字键的对应按钮取得焦点
select case keycode
case 48 to 57
cmdnumber(keycode - 48).setfocus
case 96 to 105
cmdnumber(keycode - 96).setfocus
case else
'使按下的符号键对应的按钮取得焦点
if keycode = 107 or (shift = vbshiftmask and keycode = 187) then
cmdoperator(0).setfocus
cmdoperator_click (0)
elseif keycode = 109 or keycode = 189 then
cmdoperator(1).setfocus
cmdoperator_click (1)
elseif keycode = 106 or (shift = vbshiftmask and keycode = 56) then
cmdoperator(2).setfocus
cmdoperator_click (2)
elseif keycode = 111 or keycode = 191 then
cmdoperator(3).setfocus
cmdoperator_click (3)
elseif keycode = 13 then
cmdoperator(7).setfocus
cmdoperator_click (7)
elseif keycode = 8 then
cmdgt.setfocus
call cmdgt_click
end if
end select
end sub
private sub form_keypress(keyascii as integer)
'将合法的数据输入到文本框
select case keyascii
case 48 to 58
'调用数字键点击处理程序
cmdnumber_click keyascii - 48
keyascii = 0
case 46
'调用小数点输入
cmdpoint_click
keyascii = 0
case 13
'当敲击回车时,不能触发form的 keyup 事件,因此在这里设置文本框的焦点
txtdisplay.setfocus
case else
keyascii = 0
end select
end sub
private sub form_keyup(keycode as integer, shift as integer)
txtdisplay.setfocus
end sub
private sub form_load()
strnumber = ""
strpoint = "."
intoperator = 7
end sub