如何制作一个VB计算器文档格式.docx

上传人:b****1 文档编号:3020991 上传时间:2023-05-01 格式:DOCX 页数:44 大小:161.88KB
下载 相关 举报
如何制作一个VB计算器文档格式.docx_第1页
第1页 / 共44页
如何制作一个VB计算器文档格式.docx_第2页
第2页 / 共44页
如何制作一个VB计算器文档格式.docx_第3页
第3页 / 共44页
如何制作一个VB计算器文档格式.docx_第4页
第4页 / 共44页
如何制作一个VB计算器文档格式.docx_第5页
第5页 / 共44页
如何制作一个VB计算器文档格式.docx_第6页
第6页 / 共44页
如何制作一个VB计算器文档格式.docx_第7页
第7页 / 共44页
如何制作一个VB计算器文档格式.docx_第8页
第8页 / 共44页
如何制作一个VB计算器文档格式.docx_第9页
第9页 / 共44页
如何制作一个VB计算器文档格式.docx_第10页
第10页 / 共44页
如何制作一个VB计算器文档格式.docx_第11页
第11页 / 共44页
如何制作一个VB计算器文档格式.docx_第12页
第12页 / 共44页
如何制作一个VB计算器文档格式.docx_第13页
第13页 / 共44页
如何制作一个VB计算器文档格式.docx_第14页
第14页 / 共44页
如何制作一个VB计算器文档格式.docx_第15页
第15页 / 共44页
如何制作一个VB计算器文档格式.docx_第16页
第16页 / 共44页
如何制作一个VB计算器文档格式.docx_第17页
第17页 / 共44页
如何制作一个VB计算器文档格式.docx_第18页
第18页 / 共44页
如何制作一个VB计算器文档格式.docx_第19页
第19页 / 共44页
如何制作一个VB计算器文档格式.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

如何制作一个VB计算器文档格式.docx

《如何制作一个VB计算器文档格式.docx》由会员分享,可在线阅读,更多相关《如何制作一个VB计算器文档格式.docx(44页珍藏版)》请在冰点文库上搜索。

如何制作一个VB计算器文档格式.docx

用鼠标点选这个标签,ctrl+c,ctrl+v创建数组,放到适当位置,重复总共放置5个,包含原来的那个。

把它们依次排开吧,赋上不同的Caption作为区分,怕麻烦就12345吧,不怕麻烦就,,,,,哎呀,自己想显示啥就写啥

(6)在新出现的控件中添加再两个Label

所有Label的形状相同(为的是节约空间,简洁好看麻),visable=false,名称分别为Label2和lb3

(7)5个Timer

按下F5欣赏到效果如下:

写程序啦

本程序由标签循环显示动画、弹出按键分配动画、错误提示动画和计算部分四个部分组成,下面分别介绍如何实现上述部分。

标签循环显示动画:

首先是Label()数组及时间控件的初始化,双击窗体,添加以下程序

PrivateSubForm_Load()

Fori=0To4’//把这个标签数组重叠,初始化显示的位置

Label1(i).Visible=False

Label1(i).Top=3600

Label1(i).Left=0

Nexti

Label1(0).Visible=True

Timer1.Interval=2000’//////////显示2秒钟后显示下一条提示

Timer2.Interval=50’//////////////移动时间间隔

Timer1.Enabled=True

Timer2.Enabled=False

EndSub

要达到的效果就是。

******************************按键循环滚动动画*********************************

再添加以下程序

PrivateSubTimer1_Timer()

Ifi=5Then

Label1

(1).Visible=False

Label1

(2).Visible=False

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

EndIf

Timer2.Enabled=True

i=i+1

EndSub

PrivateSubTimer2_Timer()

Label1(i-1).Top=Label1(i-1).Top+50

ExitSub

Label1(i).Visible=True

在代码窗口的顶端选——通用——声明

加上

DimiAsInteger’///////就定义了一个i的全局变量

接下来就可以按下F5看看这个动画了。

***************************************************************************

错误提示动画

添加以下程序

PrivateSubTimer5_Timer()

Iflb3.Top>

tb.HeightThen

lb3.Top=lb3.Top-150

Else

lb3.Top=tb.Height

Ifc<

100Then

c=c+1

c=0

Timer5.Enabled=False

lb3.Visible=False

不要忘了在刚才的通用声明当中多加入一个c

Dimi,cAsInteger

在Form_load事件处理中添加

Timer5.Interval=10

为了测试一下这个动画以及方便后续操作

在程序最后添加

Functionnoti(sAsString)asInteger’/////////////错误提示子程序

lb3.Top=4110

lb3.Left=0

lb3.Visible=True

Timer5.Enabled=True

lb3.Caption=s

Noti=93

EndFunction

在程序窗口的顶端选tb——KeyDown,添加以下程序

PrivateSubtb_KeyDown(KeyCodeAsMSForms.ReturnInteger,ShiftAsInteger)

noti("

1前缺少运算符"

EndSub按下F5,随意按下一个键试试效果吧

************************************************************************

弹出按键分配动画

PrivateSubCommandButton1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

CommandButton1.Visible=True

PrivateSubimg_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

Label2.Visible=False

img.Top=-2800

Timer4.Enabled=True

Timer3.Enabled=False

PrivateSubLabel1_MouseMove(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

Label2.Visible=True

img.Top=-800

img.Visible=True

Timer3.Enabled=True

Timer4.Enabled=False

PrivateSubTimer3_Timer()

img.Top=img.Top+100

Ifimg.Top>

0Then

img.Top=0

PrivateSubTimer4_Timer()

img.Top=img.Top-100

Ifimg.Top<

-4000Then

在Form_Load中添加

Timer3.Interval=5

Timer4.Interval=5

Timer3.Enabled=False

把Label2拖放在按键循环滚支显示的区域

又可以按下F5看看这个动画了

计算过程

计算过程代码在tb_KeyDown事件处理中:

总体构架是:

①禁止修改已计算过的内容;

②表达式提取;

③Selectcasekeycode

实时纠错与按键分配

Endselect

④If确定键then

计算前纠错

开始计算过程;

结果处理;

结果显示;

Endif

⑤错误处理

Endsub

计算过程的框架为:

Whilem=8

从表达式(expression)中提取计算式(inexp),已为最后计算式则m=5(退出while)

计算计算式中所有的阶乘

计算计算式中所有的x^y

从左向右计算乘除

计算计算式中所有的取反

从左向右计算计算式中的加减

用计算结果替换原表达式中的计算式

wend

先写按键重新分配,也就是图2中的布局,要保留常规的输入方法,删除原来的测试程序noti("

*********************************************************************

SelectCaseKeyCode

CasevbKeyA

KeyCode=vbKey1

CasevbKeyS

KeyCode=vbKey2

CasevbKeyD

KeyCode=vbKey3

CasevbKeyF

KeyCode=vbKey4

CasevbKeyG

KeyCode=vbKey5

CasevbKeyH

KeyCode=vbKey6

CasevbKeyJ

KeyCode=vbKey7

CasevbKeyK

KeyCode=vbKey8

CasevbKeyL

KeyCode=vbKey9

Case186

KeyCode=vbKey0

CasevbKeySpace,190

KeyCode=vbKeyDecimal

Case20

KeyCode=40

SendKeys"

+9"

Case222

KeyCode=41

+0"

CasevbKeyW,vbKeyE,vbKeyR,vbKeyT

KeyCode=vbKeyAdd

CasevbKeyZ,vbKeyX,vbKeyC,vbKeyV,189

KeyCode=vbKeySubtract

CasevbKeyY,vbKeyU,vbKeyI,vbKeyO

KeyCode=vbKeyMultiply

CasevbKeyB,vbKeyN,vbKeyM,188,191

KeyCode=vbKeyDivide

CasevbKeyP,219,220,221

+6"

Case192,9,vbKeyQ

+1"

CasevbKey2,vbKey3,vbKey4,vbKey5,vbKey7,189,190,191,192,219,220,221,222,186

IfShift=1Then

KeyCode=93

CasevbKeyDelete

tb.Text="

"

CasevbKeyEscape

End

EndSelect

F5试试是不是在英文输入法下只能输入这些字符了,实时纠错也就是在这些case里添加一些判断语句,如果符合一定的条件则此按键有效,反之则发出提示,作出其它处理。

接下来,一鼓作气,给出剩下全部代码和详细注释

在程序最后添加上阶乘子函数

Functionfac(nAsDouble)AsDouble

DimiAsDouble

DimansAsDouble

ans=1

Ifn>

Fori=1Ton

ans=ans*i

fac=ans

fac=1

完整的KeyDown程序为

Dimi,j,p,q,m,flag,flag1,flag2,flag3AsInteger

DimbAsDouble

Dims,inexp,expression,temp,s1,msgAsString

'

禁止修改已计算过的内容

Iftb.SelStart+cur_l<

store_sThen

If光标位置+补偿(光标前一个字符位置)<

历史记录长度

(即光标处在历史记录位置中)

Selectcase判断是按下的什么键

有效的按键为上下左右、end、home

Del则清空tb.text,历史记录长度,光标补偿

Esc结束程序

其它则keycode=93,此code不打印,形成忽略的效果

Else

开始整个为输入、纠错和计算过程

SelectCaseKeyCode

Case33To40

store_s=0

cur_l=0

CaseElse

数据纠错************************************************

expression=Right(tb.Text,Len(tb.Text)-store_s)’/////每按下一次键就刷新表达式

dot_s="

’/////dot_s是存储操作数的变量

flag=0

Iftb.SelStart<

>

Fori=tb.SelStart+cur_lTo1Step-1

SelectCaseMid(tb.Text,i,1)

Case0To9,"

."

dot_s=Mid(tb.Text,i,1)&

dot_s

flag=i

Fori=tb.SelStart+cur_l+1ToLen(tb.Text)

dot_s=dot_s&

Mid(tb.Text,i,1)

i=Len(tb.Text)

按键分配与纠错

Iftb.SelStart=0Then

flag1=1

flag1=0

如果0~9前面的字符是!

或)则表明缺少运算符

SelectCaseMid(tb.Text,tb.SelStart+cur_l+flag1,1)

Case"

!

"

)"

KeyCode=noti("

KeyCode=noti("

2前缺少运算符"

3前缺少运算符"

4前缺少运算符"

KeyCode=noti("

5前缺少运算符"

6前缺少运算符"

7前缺少运算符"

8前缺少运算符"

9前缺少运算符"

keycode=noti("

0前缺少运算符"

CasevbKey8

Iftb.SelStart=0Then

keycode=noti("

*前缺少操作数"

SelectCaseMid(tb.Text,tb.SelStart+cur_l,1)

CasevbKey9

keycode=noti("

(前缺少运算符"

CasevbKey0

Iftb.SelStart=0OrInStr(1,expression,"

("

)+store_s>

tb.SelStart+cur_lOrInStr(1,expression,"

)=0Then

)前无匹配的("

SelectCaseMid(tb.Te

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2