VB高级语言技巧教学讲义_第1页
VB高级语言技巧教学讲义_第2页
VB高级语言技巧教学讲义_第3页
VB高级语言技巧教学讲义_第4页
VB高级语言技巧教学讲义_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VB高级语言技巧教学讲义[内容简介]本章以一个多功能计算器应用程序为实例对第3章所开发的简单计算器进行功能扩展在基础上,较系统介绍数组、过程、函数的定义和使用方法详细讲解了鼠标和键盘的常用使用技巧。

通过本章的学习,你将初步具备利用VB编程各类高级应用程序的能力。

2[学习目标]1.掌握数组的使用方法2.掌握键盘、鼠标的使用技巧3.掌握过程和函数的定义和调用方法4.掌握API函数的调用方法5.了解枚举及自定义数据类型6.了解“多功能计算器”程序设计过程34.1“多功能计算器”程序任务目的:对上一讲的“计算器”程序进行扩展和完善44.1.1任务概述能否利用第3章所学知识,对这个程序进行一些功能扩展,比如将计算结果转换成十六进制呢?文本框主要是用于显示信息的,那么能否禁止用户通过键盘在其中输入数据呢?能否使计算器窗体总是悬浮在其他窗体之上,以便于使用呢?

5在编写数字区按钮事件代码时,工作量过于重复。10个按钮要编写10个Click事件处理程序,如果有100个这样的按钮,是不是意味着我们要编写100个这样的程序呢?仔细分析这些代码,会发现它们基本相同,那么能否采用合并同类项的方法,以减少代码设计的工作量呢?6本讲任务将针对上述问题,利用数组、键盘控件、自定义函数等方法,对简单计算器程序进行功能扩充,运行结果如图所示

7采用控件数组重新设计禁止用户键盘输入当鼠标移动时,自动显示提示信息84.1.2界面设计新知识:控件数组94.1.3代码设计1.用API函数实现“总在前面”效果102.数字区的命令按钮的Click事件与普通Click事件的区别11PrivateSubCommand1_Click(IndexAsInteger)'使用Str函数将Index转换为字符串,然后使用Trim函数去掉前端空格。

IftxtLabel.Text=""ThentxtFirst.Text=txtFirst.Text+Trim(Str(Index))ElsetxtSecond.Text=txtSecond.Text+Trim(Str(Index))EndIfEndSub123.禁止用户在文本框中输入数字三种方法可实现这种功能一是将文本框的Enabled属性设置为False;二是将文本框的Locked属性设置为True;三是通过代码控制键盘事件

13PrivateSubtxtResult_KeyDown(KeyCodeAsInteger,ShiftAsInteger)KeyCode=0'禁止所有的键盘输入(除BackSpace退格键外)EndSub由于上述方法不能禁止BackSpace退格键,因此需要在KeyPress事件中额外编写代码。PrivateSubtxtResult_KeyPress(KeyAsciiAsInteger)KeyAscii=0'禁止BackSpace退格键EndSub144.修改“计算结果”按钮的Click事件代码'将计算结果转换为十六进制数字

txtHex.Text=Hex(MyResult)

‘将计算结果转换为大写数字,由于需要编写大量代码,所以采用函数功能完成。txtBig.Text=ChangeMe(MyResult)155.编写ChangeMe函数代码16PrivateFunctionChangeMe(FirstAsDouble)AsString'声明变量

DimstrFirstAsStringDimstrBig(9)AsString'声明一个字符串数组

DimstrTempAsStringDimi,jAsInteger

'设置数组变量的值

strBig(0)=“零”:strBig(1)=“壹”:strBig(2)=“贰”

strBig(3)="叁":strBig(4)="肆"strBig(5)=“伍”:strBig(6)=“陆”:strBig(7)=“柒”:strBig(8)=“捌”

strBig(9)="玖"'将Double型的参数First转换为字符串型

strFirst=Trim(str(First))strTemp="“'开始数字转换

Fori=1ToLen(strFirst)j=Val(Mid(strFirst,i,1))'取第i位置的字符数字,并将它转换为数值型

strTemp=strTemp+strBig(j)'通过数组完成大写转换

NextI'将转换结果返回

ChangeMe=strTempEndFunction174.2数组的使用18数组1.数组的概念在实际编程时,经常会对一批具有相同属性的数据整体进行处理,这时就会用到数组类型了。VB中把一组具有同一名字,不同下标的变量称为数组,它实际上是一组相同类型的变量的集合。根据下标的个数可分为一维数组、二维数组、多维数组。192.声明静态数组方法1:Dim数组名(上界)As数据类型

DimA(5)AsInteger

DimB(5,5)AsInteger方法2:Dim数组名(下界To上界)

DimA(1To5)AsIntegerDimB(1To5,1To5)AsIntegerOptionbase{0|1}在模块级别中使用,用来声明数组下标的缺省下界缺省状态为0203.动态数组如果不能事先确定数组元素的个数,我们就可以采用动态数组声明技术主要方法(1)首先声明一个静态数组。可以只定义数组名,不指定数组的大小。比如:

DimA()AsInteger(2)在程序执行过程中,使用ReDim语句修改数组的大小或数组的上下界,比如:

ReDimA(20)AsInteger或

ReDimA(1To20)AsInteger

21控件数组数据类型为控件类型即所有元素的Name属性均相同各控件元素用Index属性表示数组下标

注:1.数组命名规则同变量名2.数组名后用圆括弧3.下标下界不可大于上界4.可用变量名或常数名作下标的边界22枚举及自定义数据类型PublicEnumenmDay星期日=1星期一=2星期二=3星期三=4星期四=5星期五=6星期六=7EndEnumDimmydayasenmdayMyday=星期日23'声明一个变量Myday,其类型为enmDayDimMydayAsenmDay

'为变量赋值,相当于Myday=1

Myday=星期日24自定义类型构造类型数据—数组原因:将不同类型的数据组合成一个整体,以便于引用。记录—用户自定义数据类型,由多个变量构成的结构化的数据类型变量是记录的成员,可以为不同类型自定义请自学251.记录类型定义语法格式:[Private|Public]Type记录类型名成员列表

EndTypePublic,可选,可在所有工程的所有模块的任何过程中使用Private,可选,只能在包含该声明的模块中使用26成员列表是记录中成员的集合,对成员进行类型说明成员名As数据类型记录类型变量的命名规则同一般变量名,不同点:不能使用类型声明后缀%,&,#,@,!,$Type…EndType块中不允许使用行号和标签27例:PublicTypeStudent学号AsString*10姓名AsString*10年龄AsInteger籍贯AsStringEndType28(1)声明变量

DimxAsStudent(2)使用

x.学号="2004001"x.姓名="张红"29

枚举和自定义类型是一种有效的数据组织方式,尽管不使用它们也照样可以开发出功能强大的应用程序,但有效地运用这两种方式,可以使程序代码更清晰,简洁。如果要使用这两种方式,最好能在模块中使用Public定义,以便整个应用程序使用。304.3过程和函数的定义和调用Sub…EndSub定义的子程序称为Sub过程(子过程)

将Function…EndFunction定义的函数称为Function过程(函数过程)

31为什么要编写自定义过程

32函数过程是一种代码分块技术,采用这种技术将应用程序划分为多个程序模块,至少可带来以下好处:1.过程规模小,容易调度和维护。2.过程可以被反复调用,从而避免了重复编码,加强了可重用性(Reuse)。3.过程是由处理某一特定功能的代码组成,是一个相对独立的实体。将应用程序划分为一个个这样的实体,会使得程序结构简洁,便于阅读维护。

334.3.2Sub过程1.在标准模块中定义公用过程342.在窗体中建立私有的Sub过程353.调用364.3.3Function过程1.定义PrivateFunctionPlusXY(xAsInteger,yAsInteger)AsIntegerPlusXY=x+yEndFunction2.调用DimIAsInteger

I=PlusXY(1,2)374.3.4参数传递机制简介形式参数:将Sub过程或Function过程定义中出现的变量名称实际参数:在调用时传递给Sub过程和Function过程的常量、变量或表达式。将参数以变量的形式传递的过程称为参数传递,VB中参数传递的机制有两种:一种是引用传递参数(默认)另一种是按值传递参数。

381.按引用传递参数这种方式将参数变量的内存地址传递给Sub或Function过程,过程通过内存地址访问实际参数的内容,从而可以方便地改变实际参数的值请分析以下程序运行结果39PrivateSubChange(xAsInteger,yAsInteger)'本程序将参数x,y的值互换DimtAsIntegert=xx=yy=t'在窗体上输出结果Print"x=";x,"y=";yEndSubPrivateSubForm_Click()DimaAsIntegerDimbAsIntegera=3:b=4Changea,bPrint"a=";a,"b=";bEndSub40运行结果:x=4y=3a=4b=3我们发现,调用Change过程后,实际参数a,b的值也发生了变化,这就是引用传递参数的执行效果。412.按值传递参数顾名思义,按值传递参数就是只把实际参数的数值传递给过程,也称传值方式。换句话说,传递给过程的只是实际参数的副本,因此,即使过程调用时改变了形式参数的值,实际参数也不会改变。形式参数前加上关键字ByVal42

将上例的过程定义改为:PrivateSubChange(ByValxAsInteger,ByValyAsInteger)请分析程序运行结果43运行结果:x=4y=3a=3b=4444.4键盘和鼠标使用技巧驱动VB程序运行的主要动力是事件响应。在VB响应的所有事件中,数目最多也最重要的是对键盘和鼠标响应的事件。因为这两个设备是用户与应用程序交互的主要工具。45响应键盘事件常用的键盘事件主要有KeyPress、KeyUp和KeyDown它们被触发的原因分别是:KeyPress事件:用户按下了某Ascii字符的键,因此它并不是对所有的键盘均响应,比如键盘上的删除键“Delete”键。KeyDown和KeyUp事件:按下或释放键盘上的任意键时均会触发此事件,包括删除“Delete”键。46要深入了解键盘事件的响应机制,还必须从对象的焦点说起471.焦点处理设置控件焦点主要有两种方法一是在程序运行的时候,通过鼠标选择操作或控件的SetFocus方法来实现;另一种是在程序设计阶段预先设置控件的TabIndex属性,然后在运行期通过按Tab键,实现控件焦点的移动。

482.SendKeys过程SendKeys"{Tab}"'发送一个Tab键SendKeys"{A10}"'发送十个A键SendKeys"{Enter}"'发送一个回车键SendKeys"{Left3}"'发送三个左移键SendKeys"{F1}"'发送一个F1键

SendKeys"{CapsLock}"'发送一个大写切换键49焦点移动演示每当按下回车,焦点自动下移,加快输入速度50PrivateSubText1_KeyPress(IndexAsInteger,KeyAsciiAsInteger)Ifkeyasii=13ThenSendKeys"{Tab}"EndIfEndSub51响应鼠标事件除了我们已经熟悉的Click、DblClick事件外,VB还提供了其他鼠标控制功能。521.改变鼠标的形状VB提供了15种鼠标形状,同时支持用户自定义功能。在不同的场合使用不同形状的鼠标是Windows应用程序的一种界面风格,这不仅可减少用户的单调感,更重要的是起到信息提示的作用53比如,当需要用户长时间等待时,我们可以将鼠标改为沙漏形状;当需要用户输入时,可以将鼠标设置成I型542.使用自定义鼠标形状如果将MousePointer的值设置成99,则可以使用自定义鼠标形状了。基本方法是:首先找一些光标(*.Cur)或图标(*.Ico)文件然后通过MouseIcon属性完成设置,操作方法也比较简便。

553.MouseDown和MouseUp事件Click是鼠标操作中最常用的事件,它相当于键盘的KeyPress事件。但发生在它之前和之后的MouseDown、MouseUp也非常有用,它们比Click事件功能更强大,能够区别出鼠标的左、中、右按钮。利用它可以编写Shift、Ctrl、Alt等键盘按键与鼠标组合操作的功能56鼠标和键盘事件综合演示57总之作为一种功能强大的可视化编程语言,VB带给我们的还远远不只这些。但我们只要从实用出发,先掌握了这些实用且常用的编程技巧,才有可能成为高级程序员--刘世峰58本章习题一、单项选择题1.DimA(1To6,1To5)定义的数组包含的元素个数是()A.30B.25C.42D.动态变化2.能够实现“窗体总在最前端”界面效果的API函数是()A.SetWindowPosB.SetWindowAPIC.SetWindowShape

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论