1、最新如何制作一个VB计算器如何制作一个VB计算器如何制作一个VB计算器功能说明:支持加、减、乘、除、取反、阶乘、x的y次方、括号按键重新分配、提高了工作效率窗口过渡动画实时输入纠错,计算纠错其它经典实用的小功能期待发现与添加界面预览:前期准备:有Microsoft Visual Basic 开发平台,懂基本的VB语法(有明白时查资料就行了)计算顺序为 ()、!、*/、取反、加减算法为:首先扫描出()内需要优先计算的部分,将这部分用来计算依照计算顺序进行计算用计算结果替换原()联同()内表达式循环直至只剩下一个数据结果的处理主要内容:怎样扫描出各个计算符号和需要运算的数据,怎样纠错,后面会详细介
2、绍开始动手之窗体设计:(1)新建工程标准exeForm属性:BordStyle=1,Caption=计算器,FillStyle=1,Height=4455,Width=7995,(近似的黄金分割)Picture自己找一张图片(2)菜单工程部件控件勾选Microsoft Forms 2.0 Object Library确定(3)在新出现的控件中添加一个Textbox名称=tb,Backstyle=0,Boardstyle=1,Height=3615,Left=0,Top=0,Width=7995,Font适当(4)一个Image名称=img,Height=3615,Left=0,Top=0,Wi
3、dth=7995(尺寸位置与Textbox相同),visibal=false,stretch=true,Picture自己找一张图片(5)在新出现的控件中添加一个Label将长度调整为与窗体同长,高度刚好可以填补视界中两张图片的差,放过去填补这个差,这样应该懂了用意了吧,Backstyle=0,Boardstyle=0,Caption随意,Font适当用鼠标点选这个标签,ctrl+c,ctrl+v创建数组,放到适当位置,重复总共放置5个,包含原来的那个。把 它们依次排开吧,赋上不同的Caption作为区分,怕麻烦就12345吧,不怕麻烦就,哎呀,自己想显示啥就写啥(6)在新出现的控件中添加再两
4、个Label所有Label的形状相同(为的是节约空间,简洁好看麻),visable=false,名称分别为Label2和lb3(7)5个Timer按下F5欣赏到效果如下:写程序啦本程序由标签循环显示动画、弹出按键分配动画、错误提示动画和计算部分四个部分组成,下面分别介绍如何实现上述部分。标签循环显示动画:首先是Label()数组及时间控件的初始化,双击窗体,添加以下程序Private Sub Form_Load() For i = 0 To 4/把这个标签数组重叠,初始化显示的位置 Label1(i).Visible = False Label1(i).Top = 3600 Label1(i)
5、.Left = 0 Next i Label1(0).Visible = True Timer1.Interval = 2000/显示2秒钟后显示下一条提示 Timer2.Interval = 50/移动时间间隔 Timer1.Enabled = True Timer2.Enabled = FalseEnd Sub 要达到的效果就是。*按键循环滚动动画*再添加以下程序Private Sub Timer1_Timer() If i = 5 Then Label1(0).Visible = True Label1(1).Visible = False Label1(2).Visible = Fal
6、se Label1(3).Visible = False Label1(4).Visible = False Label1(0).Top = 3600 Label1(1).Top = 3600 Label1(2).Top = 3600 Label1(3).Top = 3600 Label1(4).Top = 3600 i = 0 End If Timer2.Enabled = True i = i + 1End SubPrivate Sub Timer2_Timer() Label1(i - 1).Top = Label1(i - 1).Top + 50 If i = 5 Then Label
7、1(0).Visible = True Label1(0).Top = 3600 Exit Sub End If Label1(i).Visible = TrueEnd Sub在代码窗口的顶端选通用声明加上Dim i As Integer/就定义了一个i的全局变量接下来就可以按下F5看看这个动画了。*错误提示动画添加以下程序Private Sub Timer5_Timer() If lb3.Top tb.Height Then lb3.Top = lb3.Top - 150 Else lb3.Top = tb.Height If c 0 Then Timer3.Enabled = False
8、img.Top = 0 End IfEnd SubPrivate Sub Timer4_Timer() img.Top = img.Top - 100 If img.Top 0 Then For i = 1 To n ans = ans * i Next i fac = ans Else fac = 1 End IfEnd Function完整的KeyDown程序为Private Sub tb_KeyDown(KeyCode As MSForms.ReturnInteger, Shift As Integer)Dim i, j, p, q, m, flag, flag1, flag2, fla
9、g3 As IntegerDim b As DoubleDim s, inexp, expression, temp, s1, msg As String禁止修改已计算过的内容If tb.SelStart + cur_l store_s ThenIf 光标位置+补偿(光标前一个字符位置)历史记录长度(即光标处在历史记录位置中)Select case判断是按下的什么键有效的按键为上下左右、end、homeDel则清空tb.text,历史记录长度,光标补偿Esc结束程序其它则keycode=93,此code不打印,形成忽略的效果End selectElse开始整个为输入、纠错和计算过程 Selec
10、t Case KeyCode Case 33 To 40 Case vbKeyDelete tb.Text = store_s = 0 cur_l = 0 Case vbKeyEscape End Case Else KeyCode = 93 End SelectElse数据纠错* expression = Right(tb.Text, Len(tb.Text) - store_s)/每按下一次键就刷新表达式dot_s = /dot_s是存储操作数的变量flag=0 If tb.SelStart 0 Then For i = tb.SelStart + cur_l To 1 Step -1 S
11、elect Case Mid(tb.Text, i, 1) Case 0 To 9, . dot_s = Mid(tb.Text, i, 1) & dot_s Case Else flag = i i = 0 End Select Next i For i = tb.SelStart + cur_l + 1 To Len(tb.Text) Select Case Mid(tb.Text, i, 1) Case 0 To 9, . dot_s = dot_s & Mid(tb.Text, i, 1) Case Else i = Len(tb.Text) End Select Next i End
12、 If按键分配与纠错If tb.SelStart = 0 Then flag1 = 1 Else flag1 = 0 End If Select Case KeyCode Case vbKeyA如果09前面的字符是!或)则表明缺少运算符 Select Case Mid(tb.Text, tb.SelStart + cur_l + flag1, 1) Case !, ) KeyCode=noti (1前缺少运算符) Case Else KeyCode = vbKey1 End Select Case vbKeyS Select Case Mid(tb.Text, tb.SelStart + cu
13、r_l + flag1, 1) Case !, ) KeyCode = noti (2前缺少运算符) Case Else KeyCode = vbKey2 End Select Case vbKeyD Select Case Mid(tb.Text, tb.SelStart + cur_l + flag1, 1) Case !, ) KeyCode = noti (3前缺少运算符) Case Else KeyCode = vbKey3 End Select Case vbKeyF Select Case Mid(tb.Text, tb.SelStart + cur_l + flag1, 1)
14、Case !, ) KeyCode = noti (4前缺少运算符) Case Else KeyCode = vbKey4 End Select Case vbKeyG Select Case Mid(tb.Text, tb.SelStart + cur_l + flag1, 1) Case !, ) KeyCode =noti (5前缺少运算符) Case Else KeyCode = vbKey5 End Select Case vbKeyH Select Case Mid(tb.Text, tb.SelStart + cur_l + flag1, 1) Case !, ) KeyCode
15、 =noti (6前缺少运算符) Case Else KeyCode = vbKey6 End Select Case vbKeyJ Select Case Mid(tb.Text, tb.SelStart + cur_l + flag1, 1) Case !, ) KeyCode =noti (7前缺少运算符) Case Else KeyCode = vbKey7 End Select Case vbKeyK Select Case Mid(tb.Text, tb.SelStart + cur_l + flag1, 1) Case !, ) KeyCode = noti (8前缺少运算符)
16、Case Else KeyCode = vbKey8 End Select Case vbKeyL Select Case Mid(tb.Text, tb.SelStart + cur_l + flag1, 1) Case !, ) KeyCode = noti (9前缺少运算符) Case Else KeyCode = vbKey9 End Select Case 186 Select Case Mid(tb.Text, tb.SelStart + cur_l + flag1, 1) Case !, ) keycode=noti (0前缺少运算符) Case Else KeyCode = v
17、bKey0 End Select Case vbKey8 If Shift = 1 Then If tb.SelStart = 0 Then keycode=noti( *前缺少操作数) Else Select Case Mid(tb.Text, tb.SelStart + cur_l, 1) Case 0 To 9, !, ) Case Else keycode=noti( *前缺少操作数) End Select End If End If Case vbKey9 If Shift = 1 Then If tb.SelStart = 0 Then Else Select Case Mid(tb.Text, tb.SelStart + cur_l, 1) Case 0 To 9, !, ) keycode=noti((前缺少运算符) Case Else End Select End If End If Case vbKey0 If Shift = 1 Then If tb.SelStart = 0 Or InStr(1, expression, () + store_s tb.SelStart + cur_l Or InStr(1, expression, () = 0 Then keycode=noti( )前无匹配的() Else S
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1