文档库 最新最全的文档下载
当前位置:文档库 › 用vb编写计算器(与小键盘响应)(修改)

用vb编写计算器(与小键盘响应)(修改)

Option Explicit
Dim lastinput As String '指示上一次按键事件的类型
Dim num1 As Double '第一个操作数
Dim num2 As Double '第二个操作数
Dim opttype As Integer '按了那个符号
Dim keynum As Integer
Dim result As Double '表示运算结果



Private Sub Command1_Click(Index As Integer)
'当按下数字键(0-9)时,在文本框尾部追加数据
'并通过变量lastinput记录上次按键为数字键
If Len(Text1.Text) > 16 Then Exit Sub
If Text1.Text = "0" Or lastinput = "eqv" Then Text1.Text = ""
Text1.Text = Text1.Text & Index '追加数据
lastinput = "num"
If keynum >= 48 And keynum <= 57 Then Command1(keynum - 48).Value = True
'47-58是0-9的asc码值
Command1(0).SetFocus '设置焦点为0,很关键!
End Sub

Private Sub Command10_Click() '计算x的平方
Text1.Text = Val(Text1.Text) * Val(Text1.Text)
End Sub

Private Sub Command11_Click() '开方按钮
If Text1.Text > 0 Then
Text1.Text = Sqr(Val(Text1.Text)) '运用Sqr函数
Else
MsgBox "被开方数不能为负数", 0 + 48, "提示信息" '被开方数为负数时提示错误
Text1.Text = "" '清零
Text1.SetFocus '焦点
End If
End Sub

Private Sub Command12_Click() 'OFF按钮
End '退出程序
End Sub

Private Sub Command2_Click() '小数点
'如果数据位数超出范围或数据中已包含小数点,退出本过程
If Len(Text1.Text) > 16 Or InStr(1, Text1.Text, ".") > 0 And lastinput <> "eqv" Then Exit Sub
'若以"0"开始输入,在“0”前加0
'若在数据尾部输入过程中按下“.”,直接将“.”追加在数据尾部
If lastinput = "opt" Or lastinput = "eqv" Or lastinput = "neg" Then
Text1.Text = Text1.Text + "0."
Else
Text1.Text = Text1.Text + "."
End If
lastinput = "num"
End Sub

Private Sub Command3_Click() 'C按钮,每次退一个数字
If Len(Text1.Text) >= 1 Then
Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
Else
MsgBox " 已经是最后一位了", 0 + 48, "提示信息"
End If
End Sub

Private Sub Command4_Click() 'DEL按钮
'重新设置并初始化变量
num1 = 0
num2 = 0
Text1.Text = "0"
opttype = -1
lastinput = "num"
End Sub

Private Sub Command5_Click(Index As Integer) '加减乘除号
'按下运算符键后,获取第一个操作数num1,并记录按下的运算符
num1 = Val(Text1.Text)
Text1.Text = ""
lastinput = "opt"
opttype = Index
End Sub

Private Sub Command6_Click() '等号结果
num2 = Val(Text1.Text)
Select Case opttype
Case 0
result = num1 + num2 '加法运算
Case 1
result = num1 - num2 '减法运算
Case 2
result = num1 * num2 '乘法运算

Case 3

'除法运算
If num2 = 0 Then
Text1.Text = ".E"
MsgBox "输入数据不能为0", 0 + 48, "提示" '除数为0时提示错误
Else
result = num1 / num2
End If
End Select
If Text1.Text <> ".E" Then Text1.Text = Trim(Str(result)) '结束本次计算,重新赋值
num1 = 0
num2 = 0
lastinput = "eqv"
opttype = -1
End Sub


Private Sub Command7_Click() 'Backspace按钮,退格的作用
If Len(Text1.Text) >= 1 Then
Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
Else
MsgBox " 已经是最后一位了", 0 + 48, "提示信息"
End If
End Sub

Private Sub Command8_Click() '正负号转换
Text1.Text = Trim(Str(-Val(Text1.Text)))

End Sub

Private Sub Command9_Click() '倒数按钮
If Text1.Text = 0 Then '0没有倒数
MsgBox "数据输入不正确", 0 + 48, "错误提示"
Else
Text1.Text = "0" & 1 / Val(Text1.Text)
End If
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer) '与小键盘响应
Dim i As Integer '定义i
'下面程序里的Beep使你按下键盘时发出声音
If KeyAscii = Asc("0") Then '数字键0
i = 0
Command1_Click (i)
Beep
ElseIf KeyAscii = Asc("1") Then '数字键1
i = 1
Command1_Click (i)
Beep
ElseIf KeyAscii = Asc("2") Then '数字键2
i = 2
Command1_Click (i)
Beep
ElseIf KeyAscii = Asc("3") Then '数字键3
i = 3
Command1_Click (i)
Beep
ElseIf KeyAscii = Asc("4") Then '数字键4
i = 4
Command1_Click (i)
Beep
ElseIf KeyAscii = Asc("5") Then '数字键5
i = 5
Command1_Click (i)
Beep
ElseIf KeyAscii = Asc("6") Then '数字键6
i = 6
Command1_Click (i)
Beep
ElseIf KeyAscii = Asc("7") Then '数字键7
i = 7
Command1_Click (i)
Beep
ElseIf KeyAscii = Asc("8") Then '数字键8
i = 8
Command1_Click (i)
Beep
ElseIf KeyAscii = Asc("9") Then '数字键9
i = 9
Command1_Click (i)
Beep
ElseIf KeyAscii = Asc("+") Then '加号按键
i = 0
Command5_Click (i)
Beep
ElseIf KeyAscii = Asc("-") Then '等号按键
i = 1
Command5_Click (i)
Beep
ElseIf KeyAscii = Asc("*") Then '乘号按键
i = 2
Command5_Click (i)
Beep
ElseIf KeyAscii = Asc("/") Then '除号按键
i = 3
Command5_Click (i)
Beep
ElseIf KeyAscii = Asc("=") Then '等号按键
Command6_Click
Beep
ElseIf KeyAscii = Asc(".") Then '小数点按键
Command2_Click
Beep
End If
End Sub


Private Sub Form_Load()
lastinput = "nul"
num1 =

0 '第一个操作数初值为0
num2 = 0 '第二个操作数初值为0
opttype = -1
Text1.Text = "0" 'Text1控键中显示0
Text1.SelStart = Len(Text1.Text)
End Sub


Private Sub Text1_Change()

End Sub

相关文档