Visual-Basic程序设计(60版)解析课件

PPT
  • 阅读 25 次
  • 下载 0 次
  • 页数 265 页
  • 大小 2.376 MB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档50.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
Visual-Basic程序设计(60版)解析课件
可在后台配置第一页与第二页中间广告代码
Visual-Basic程序设计(60版)解析课件
可在后台配置第二页与第三页中间广告代码
Visual-Basic程序设计(60版)解析课件
可在后台配置第三页与第四页中间广告代码
Visual-Basic程序设计(60版)解析课件
Visual-Basic程序设计(60版)解析课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 265
  • 收藏
  • 违规举报
  • © 版权认领
下载文档50.00 元 加入VIP免费下载
文本内容

【文档说明】Visual-Basic程序设计(60版)解析课件.ppt,共(265)页,2.376 MB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44911.html

以下为本文档部分文字说明:

VisualBasic程序设计(6.0版)2第一章VisualBasic程序设计概述1.1概述1.2运行环境、安装和启动1.3VB集成开发环境31.1概述一、VB简介:VisualBasic是基于Basic的可视化的程序设计语言。VisualBasic6.0中文版是Mi

crosoft公司最新推出的可视化开发工具,是一种基于Windows操作系统的新型的现代程序设计语言,是一种易于学习、功能强、效率高的编程工具。任何具有初步程序设计基础的人,都能在很短的时间内掌握好VB,并有效地编写出各种Windows程序。VB6.

0包括三个版本:学习版、专业版、企业版4二、VB主要功能特点:1.具有面向对象的可视化设计工具2.事件驱动的编程机制3.提供了易学易用的应用程序集成开发环境4.结构化的程序设计语言5.支持多种数据库系统的访问6.OLE技术。VB核心就是其对对象的链接

与嵌入(OLE)的支持。7.Active技术8.完备的help联机帮助功能三、VB6.0新功能特点51.2运行环境、安装和启动一、运行环境:二、安装:安装文件:setup.exe三、启动:方法:1、双击桌面VB快捷方式。2、“开始”|程序|MicrosoftVisualStudio6.

0|MicrosoftVisualBasic6.03、“开始”|运行|C:\programfiles\MicrosoftVisualStudio\VB98\VB6.exe6进入VB6.0窗口71.3VB集成开发环境工具箱工程窗口属性窗口窗体布局立即

窗口窗体窗口81.主窗口应用程序窗口,由标题栏、菜单栏和工具栏组成VB的三种工作模式(标题栏总显示当前模式)(1)设计模式:创建应用程序的大多数工作都是在设计时完成的。在设计时,可以设计窗体、绘制控件、编写代码并使用“属性”窗口来设

置或查看属性设置值。(2)运行模式:代码正在运行的时期,用户可与应用程序交流。可查看代码,但不能改动它。(3)中断模式:程序在运行的中途被停止执行时。在中断模式下,用户可查看各变量及不是属性的当前值,从而了解程序执行是否正常。还可以修改程序代码,检查、调试

、重置、单步执行或继续执行程序。92.窗体(Form)设计窗口窗体设计窗口是屏幕中央的主窗口,它可以作为自定义窗口用来设计应用程序的界面。用户可以在窗体中添加控件、图形和图片来创建所希望的外观。每个窗口必须有一个的

窗体名字,建立窗体时缺省名为Form1,Form2,...。窗体网格点间距的设置:设计模式-‖工具”–‖选项”应注意窗体名(代码中使用的标识对象名称)和窗体文件名的区别10窗体名窗体文件名113.代码(code)窗口在

设计模式中,通过双击窗体或窗体上任何对象或通过“工程资源管理器”窗口中的“查看代码”按钮来打开代码编辑器窗口。代码编辑器是输入应用程序代码的编辑器。代码窗口主要包括:a.对象列表框b.过程列表框c.代码框d.过程查看按钮e.全模块查看按钮12134.属

性(properties)窗口属性是指对象的特征,如大小、标题或颜色等数据。在VisualBasic6.0设计模式中,属性窗口列出了当前选定窗体或控件的属性的值,用户可以对这些属性值进行设置。14工程是

指用于创建一个应用程序的文件的集合。工程资源管理器列出了当前工程中的窗体和模块5.工程资源管理器(projectexplorer)窗口15工程文件的扩展名为.VBP工程资源管理器下面的列表窗口,以层次列表形式组成这个工程的所有文件。主要包括三种类型的文件:窗体文件(.FRM)存

储窗体上使用的所有控件对象和有关的属性、对象相应的事件过程、程序代码。标准模块文件(.BAS)所有模块级变量和用户自定义的通用过程(可以被应用程序各处调用的过程)类模块文件(.CLS)包含用户对象的属性及方法。16工具箱提供一组工具,用于设

计时在窗体中放置控件生成应用程序的用户接口。系统启动后缺省的General工具箱就会出现在屏幕左边,上面有常用“部件”6.工具箱(ToolBox)窗口17定制工具箱添加选项卡:对添加的选项卡加控件的方法:(1)在已有的选项卡中拖动所需控件(2

)激活选项卡-”工程”-“部件”18窗体布局窗口显示在屏幕右下角。用户可使用表示屏幕的小图像来布置应用程序中各窗体的位置。这个窗口在多窗体应用程序中很有用,因为这可以指定每个窗体相对于主窗体的位置。7.窗体布

局窗口19立即窗口:中断模式中调试应用程序。对象浏览窗口:可查看工程定义的模块或过程,也可查看对象库、类型库、类、方法、属性及可在过程中使用的常数。20第二章简单的VB程序设计2.1程序设计方法的发

展2.2对象的概念2.3建立简单的应用程序2.4窗体和基本控件2.5工程的管理及环境设置2.6制作成安装盘2.7使用帮助系统212.1程序设计方法的发展1.初期的程序设计高运行效率、少占用内存为目标2.结构化程序设计程序的可读性、可维护性为目标程序=算法+数据结构的面向过

程的程序设计3.面向对象的程序设计(OOP)降低程序的复杂性、提高软件的开法效率和改善工作界面为目标程序=对象+消息的面向对象的程序设计22结构化的分解突出过程(Howtodo?)面向对象的分解突出真实世

界和抽象的对象(Whattodo?)目前常用的面向对象语言有:VisualBasic、VisualC++、VisualFoxPro等优点a.符合人们的思维方法b.易于软件的维护和功能的增减c.能用继承的方式减短程序开发时间d

.与可视化技术结合,改善了工作界面232.2对象的概念一、对象和类1、类:是创建对象实例的模板,是同种对象的集合与抽象,包含了创建对象的属性描述和行为特征的定义.2、对象:是类的一个实例,继承了类的属性、方法。Vb中常用的对象有:窗体、控

件等。3、控件:以图标的形式放在工具箱中。VB中的控件分为三类:内部控件(标准控件):如工具箱上的控件,20个ActiveX控件:“工程/部件”命令加载可插入对象:Windows应用程序的对象,如Excel工作表。二、对

象的建立和编辑:1、对象的建立:两种方法2、对象的选定:单选、多选3、复制或删除对象4、对象的命名24三、对象的三要素:属性、事件和方法(1)属性对象的性质,即用来描述和反映对象特征的参数。(2)事件对象的响应称为事件,它发生在用户与应用程序交互时。如单击控件、鼠标移动、

键盘按下等。事件过程指附在该对象上的用户编写的程序代码,是事件的处理程序。事件驱动过程是图形用户界面的本质,由用户控制而代码作出响应。25VB程序执行步骤:启动应用程序,装载和显示窗体窗体(或窗体上的控件)等待事件的发生事件发生时,执行对应的事件

过程重复执行(2)和(3),直到遇到“END”结束语句结束程序的运行或单击“结束”按钮强制停止程序的运行26(3)方法对象的动作,即将一些通用的过程编写好并封装起来,作为方法供用户直接调用。对象方法的调用格式:[对象.]方法[参数名

表]例如:在窗体上显示一行文字。Form1.Print”欢迎使用VisualBasic6.0”272.3建立简单的应用程序设计一个VB应用程序的通用步骤:1.设计用户界面的对象2.设置对象的属性3.编写对象事件代码4.保

存文件5.程序运行和调试(解释执行:或“运行|启动”或按F5)6.建立可执行文件。(编译运行:“文件”|“生成…exe”)28例2.1编写一个对输入字符进行转换的程序转换规则为:将其中的大写字母转换成小写字母,小写字母转换成大

写字母,空格不转换,其余转换成“*”。要求每输入一个字符,马上就进行判断和转换。29PrivateSubText1_KeyPress(KeyAsciiAsInteger)DimaaAsString*1

aa=Chr$(KeyAscii)SelectCaseaaCase"a"To"z"aa=Chr$(KeyAscii-32)Case"A"To"Z"aa=Chr$(KeyAscii+32)Case""CaseElseaa="*"EndSelectText2

.Text=Text2.Text&aaEndSub30PrivateSubCommand1_Click()Text1.Text=""Text2.Text=""EndSubPrivateSub

Command2_Click()EndEndSub312.3.4保存和运行程序保存窗体文件保存工程程序的运行(1)编译运行模式——生成.exe(2)解释运行模式——F5322.4窗体和基本控件一

、基本属性1.Name名称属性创建的对象名称,有默认的名.在程序中,控件名是作为对象的标识而引用,不会显示在窗体上。2.Caption标题属性该属性决定了控件上显示的内容。3.Height、width、top和left属性LeftTopHeightWidth334.Enabled属性控件是否可

操作.当设置为false时,呈暗淡色,禁止用户进行操作.5.Visible属性控件是否可见.当设置为false时,用户看不到,但控件本身存在。6.Font属性Fontname字体Fontsize字体大小Fontbold是否是粗体

Fontitalic是否斜体Fontstrikethru是否加一删除线Fontunderline是否带下划线例2.2在窗体上建立两个命令按钮Command1和Command2,Command2的Font通过属性窗口设置,其余属性通过代码实现。347.Forecolor前景颜色属性设置控

件的前景颜色(即正文颜色).其值是一个16进制常数,用户可以在调色板中直接选择所需颜色。8.Backcolor背景颜色属性9.Backstyle背景风格属性0-transparent:透明显示,即控件背景颜色显示不出来10.BorderStyle边框风格属性0-None:控件周围没有边框

1-FixedSingle:控件带有单边框。11.Alignment属性控件上正文水平对齐方式0:正文左对齐1:右对齐2:居中12.AutoSize属性控件是否根据正文自动调整大小,False.3513.MousePointer属性指示鼠标指针的类型,当为99时为用户自定义类型。MouseIcon

属性设置鼠标的图标,当MousePointer为99时起作用。图标库在Graphics目录下,扩展名一般为.ico或.cur14.WordWarp属性为True时水平方向上下发生变化。15.TabIndex属性决定了按Tab键时,焦点在各个控件移动的顺序。各个控件默认的T

abIndex值就是控件建立时的顺序,第一个为0.16.控件默认属性反映该控件最重要的属性,使用时可省略属性名。如:Text1.text=―Welcome‖与Text1=―Welcome‖是等价的。部份控件默认值:文本框的为:Text命令按钮为:Default标签为:Caption单选/复选按钮为

:Value图形/图像框为:Picture注意:Command的Default为True,当按Enter键,该控件起作用。36默认控件名Name标题Caption有关属性设置Form1颜色、对齐、鼠标属性例MousePointer=99,MouseIcon=Key04.icoLab

el1左对齐Alignment=0,BorderStyle=1Label2居中Alignment=1,BorderStyle=1Label3自动AutoSize=True,WordWarp=False,BorderStyle=1Label4背景白BackColor

=&H00FFFFFF&,BorderStyle=0Label5前景红ForeColor=&H000000FF&,BorderStyle=0例:有关属性的综合应用。对象设置:效果:37标题图标控制菜单框最小化按钮

最小化按钮边框样式二、窗体1.属性:P27StartUpPosition、Icon、ControlBoxMaxButton、MinButtonWhatsThisButton、WhatsThisHelpPicture、AutoRedrawBorderStyle(0

12345)WindowsState(0-正常、1-最小化、2-最大化)注:1、Picture属性可在属性窗口设置,也可通过Loadpicture函数用代码来实现。函数格式为:[对象].Picture=Loadpictur

e(―文件路径\文件名”)对象可以是窗体、图片框、图像框,缺省时为窗体。VB可以识别的图形格式有:.bmp.gif.jpg.wmf.ico.cur等。2、两者的不同在于:属性设置时设置的图片,会被保存起来并与窗体同时加载,而运行时加载的图片,不和应用程序

一起保存。382.事件:P28Click、DblClick、Load、UnLoad等Load当装入窗体时激发,通常用于对属性和变量初始化3.方法:P28Print、Cls、Move、Show、Hide等当在Form_Load事件中使用Print方法时,必须将该窗体的AutoRedraw设置为T

rue,否则Print方法无效。例上述属性、Click、DblClick和Load事件演示。书上例子:P2839三.标签Label1、功能:用于显示文本(输出)信息,不能作为输入信息的界面。2、属性:P293、事件:clic

k、Dblclick、Change例2.5.显示浮雕效果的文字,实现方法:字颜色、标签位置书上例子:P29四.文本框TextBox功能:是一个文本编辑区域,可以输入,编辑和显示正文内容。1、属性:P30•Text:正文内容Maxlength:设置正文的最多字符个数,0任意长度值.•MultiLi

ne:是否为多行,默认一行.FALSE•ScrollBars:当MultiLine为True时,该属性才有效,表示滚动条的形式0-None、1-Horizontal、2-Vertical、3-Both。•Loc

ked:是否可被编辑属性,False,表示为可编辑。•PassWordchar:口令字符.Text属性返回输入的数据,屏幕显示该字符,•SelStart,SelLength,SelText:选中文本的起始、长度、内容。例2.6复制选中的文本402.常用事件•Change:当改变文本框的Text

属性时会引发该事件.•KeyPress(KeyAsciiAsInteger):同上,并可返回一个KeyAscii参数KeyAscii为13,按回车键;为0去除刚输入的字符.•LostFocus:当控件失去焦点时发生.•GotFocus:当控件获得焦点时发生.3.常用方法[对

象.]SetFocus:是把光标移到指定的文本框对象中(即设置焦点)。4.文本框的应用数据过滤例2.7要求输入合法的数字数据。当输入结束时(按Tab键),对于输入正确的数据,显示正确信息;对输入的非数字数据,则

响铃(Beep)、显示错误信息、清除文本框中的内容,并使焦点重新回到文本框。•Text2_LostFocus当输入结束按Tab键时,该事件激发•IsNumeric(Text2):判断是否输入非数字数据.•Text

2.SetFocus:使焦点重新回到文本框书上例子:P3241五.命令按钮CommandButton功能:接受用户输入的命令。输入命令可以有三种方式:鼠标单击Tab键焦点到该按钮快捷键1.属性:P33Caption:命令按钮显示的内容,可设置快捷键,例&Ok,显

示OkValue:检查该按钮是否按下.该属性在设计时无效.Picture:按钮可显示图片文件(.bmp和.Ico),当Style为1时有效Style:确定显示的形式.0只能显示文字,1文字、图形均可。ToolTipText:设置工具提示

,和Picture结合使用。2.事件Click423.应用:例2.8建立一个允许剪切、复制和粘贴的简单便笺板程序。可增加内容:利用MouseMove事件决定命令按钮的有效性,即当选中内容,“剪切”、“复

制”按钮有效,否则无效。43DimstAsStringPrivateSubcmdcopy_Click()st=txtnoteedit.SelTextcmdcopy.Enabled=Falsecmdcut.E

nabled=Falsecmdpaste.Enabled=TrueEndSubPrivateSubmdcut_Click()st=txtnoteedit.SelTexttxtnoteedit.SelText=""cmdcopy.Enabled=Fals

ecmdcut.Enabled=Falsecmdpaste.Enabled=TrueEndSubPrivateSubcmdexit_Click()EndEndSubPrivateSubcmdpaste_Click()txtnoteedit.SelT

ext=stEndSubPrivateSubForm_Load()cmdcopy.Enabled=Falsecmdcut.Enabled=Falsecmdpaste.Enabled=FalseEndSub44Subtxtnoteedit_Mo

useMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)Iftxtnoteedit.SelText<>""Thencmdcopy.Enabled=Truecmdcut.Enabled=Truecmdpa

ste.Enabled=FalseElsecmdcopy.Enabled=Falsecmdcut.Enabled=Falsecmdpaste.Enabled=TrueEndIfEndSub45六、常用方法Vb中使用方法的语法结构是相同的[对象.]方法[参数列表]1.print

方法形式:[对象.]print[{spc(n)|tab(n)}][表达式列表]作用:在对象上输出信息。对象:可以是窗体(form)、图形框(picturebox)、打印机。若省略,则在窗体上输出。46表达式列表开始位置是由对象的currentx和c

urrenty属性决定的,缺省为打印对象的左上角0,0。例2-9:print方法输出图形。PrivateSubForm_Click()Form1.CurrentX=200Form1.CurrentY=550Fori=1To5PrintTa

b(i+5);String(6-i,"▼");_Spc(6);String(i,"▲")NextiEndSub472、cls方法形式:[对象.]cls(如:picture.cls)作用:用于清除运行时在窗体或图形框中显示的文本或图形。注意:(1)cls方法只清除

运行时在窗体或图形框中显示的文本或图形,不清除窗体在设计时的文本或图形。(2)cls方法使用后,currentx和currenty属性被设置为0。483、move方法形式:[对象.]move左边距离[,上边距离[,

宽度[,高度]]]作用:用于移动窗体或控件,并可改变其大小。对象:可以是窗体及除时钟、菜单外的所有控件,省略对象为窗体。如果对象是窗体,则“左边距离”和“上边距离”以屏幕左边界和上边界为准,否则以窗体的左边界和上边界为准,

宽度和高度表示可改变其大小。49例2-10PrivateSubForm_Load()Image1.Top=0Image1.Left=0Image1.Picture=LoadPicture(App.Path+"\1.gi

f")EndSubPrivateSubImage1_Click()Image1.Move(Form1.Left+Form1.Width)\2-Form1.Left,(Form1.Top+Form1.Height)\2-Form1.Top,Image1.Width\2,I

mage1.Height\2EndSub50七、应用举例例2-11:根据房产商提供的信息,购房者选择房型、面积、单价、按揭期等信息,编写计算每月支付贷款的程序。程序由两个窗体构成,第一个窗体输入或选择买房的数据,该窗体

由列表框选择数据、标签显示数据、文本框输入数据;第二个窗体显示房屋的平面图,该窗体仅有一个图形控件。512.5工程的管理一、工程的组成工程文件包含了一个应用程序的所有文件:工程文件(.vbp):工程组文件(.vbg):窗体文件(.

frm):控件及属性、事件过程和自定义过程窗体的二进制数据文件(.frx),自动产生同名.frx文件。标准模块文件(.bas)类模块文件(.cls)资源文件(.res)ActiveX控件的文件(.ocx)二、创建、打开和保存工程:“文件”菜单52三.添加、删除和保存文件:可利用“文件”

和“工程”菜单1、窗体名和窗体文件名概念窗体名:窗体的Name属性,在代码中用来引用该窗体,同一工程不能有相同的窗体名;窗体文件名:窗体存放在磁盘上的文件名,该文件包含了该窗体的所有控件属性和代码,同一文件夹不能有相同的文件名。2、在工程中添加现存的窗体时,只是对该窗体文件的引用纳入

工程。因此,如果更改窗体并保存它,会影响包含此窗体文件的任何工程。3、在工程中删除窗体时,仅将此窗体从工程里删除掉,但是窗体文件仍存在于磁盘上。但是,如果在VB之外删除一个窗体文件,VB不能更新此工程文件,当打开此工程时

,将显示一个文件丢失的错误信息。窗体文件名窗体名53四、环境设置“工具”——”选项”1.”编辑器”选项卡2、“通用”选项卡4、对窗体文件改名方法:在“工程资源管理器”中--右击窗体文件--“Form另存为…”5、保存窗体文件

:若只想保存窗体文件而不保存工程文件,可直接在“工程资源管理器”中选定,然后执行“文件”菜单中的相应选项。542.6制作成安装盘2.6.1使用打包和展开向导打包:把工程中用到的各种类型的文件(包括工程自身的文件、必要的系统文件和安装主文件)进行打包压缩后,存放到特定的目录

下。展开:把打包的文件展开到用户可以携带的用来安装的软盘、光盘等介质。管理脚本:记录打包或展开过程中的设置,便于以后做同样的操作。系统的压缩文件以.cab扩展名保存。2.6.2检测安装程序55第三章VB语言基础3.1编码基础3.2数据类型

3.3常量与变量3.4运算符和表达式3.5基本语句3.6数组3.7过程3.8常用算法举例3.9程序调试563.1编码基础一、书写要求:1.VB代码不区分字母的大小写系统关键字自动转换每个单词的首字母大写;用户自定义行以第一次为准2.语句书写自由一行可书写几个语句,之间用冒号分隔;一行

最多255个字符;一条语句可分若干行书写,用续行符(空格+下划线)连接3.注释有利于程序的维护和调试Rem或单撇号“‘”以及“编辑”工具栏的“设置注释块”;VB中注释语句会自动变为绿色4.保留行号与标号5.其他注意事项:保留字与变量之间至少有一空格;字母“l”与数字“1”、字

母“o”与数字“0”的使用。573.2数据类型一、标准数据类型:581、数值数据类型:IntegerLongSingleDoubleCurrencyByte(1)Integer和Long型用于保存整数(2)S

ingle和Double型用于保存浮点实数(3)Currency型是定点实数或整数(4)Byte字节型用于存储二进制数592、日期(Date)数据类型按8字节浮点数来存储。日期范围:公元100年1月1日~9999年12月31日时间范围:0:00:00~23:59:5

9表示方法:一般日期形式前后加#来表示另一种是以数字序列表示日期和时间(1)一般日期表示法:使用成对#将任何可被认作日期和时间的字符括起来。公元年份默认19年,因而填入1995年与填入95年效果一样,但年的部分输入0~29间的数字

,则VB自动转换为20年。例如:#5/25/24#与#5/25/2024#等价。而#5/25/95#,#May25,95#,#May-25-95#,#25May1995#,#1995May25#等均为合法日期格式。60(2)数字序列表示法数字序列是双精度的浮点数,由VB自动解释。

序号的整数部分表示日期,小数部分表示时间。在VB中,基准日期为公元1899年12月30日,这一天的整数部分为0,比基准早的日期序号为负数,比其晚的日期序号为正数,其取值范围为657434(公元100年1月1日)到2958465(公元9999年12月31日)。小数部分:以某个时间点占一天24小时的比

例表示。如:6:00AM会以0.25来表示。-2.5表示1899-12-2812:00:005.75表示1900-1-418:00:00366.05表示1900-12-311:12:00367.05表示1901-1-11:12:00-367.05表示1898-12-281:12:00613、逻辑

(布尔型)数据型:Boolean当逻辑型转换成整型数据时:true–(-1)false—(0)当其他类型数据转换成逻辑数据时:非0数转换为true,0转换为false4、字符串型:String―‖5、对象数据类型:Object作为32位(4个字节)地址来存储62

6、变体类型:Variant是所有未定义的变量的缺省数据类型,它可以包括标准数据类型,还包含四个特殊的数据:empty(空)表示未指定确定的数据null(无效)表示数据不合法Error(出错)指出过程中出现了一个错误条件Nothing(无指向)表示数据还没有指向一个具

体对象Vartype:检测变体型变量中保存的数值类型如:dimtVartype(t)或Vartype(667)63二、自定义类型让用户自己定义的数据类型,由若干个标准数据类型组成。是一组不同类型变量的集合。相当于C语言中的结构

类型;Pascal中的记录类型。1.自定义类型的定义形式如下:Type自定义类型名元素名[(下标)]As类型名…[元素名[(下标)]As类型名]EndType其中:元素名:表示自定义类型中的一个成员下标:表示数组类型名:为标准类型64例如,以下定义了一个有关学生信息的自定义类型:TypeStudT

ypeNoAsInteger'学号NameAsString*20'姓名SexAsString*1'性别Mark(1To4)AsSingle'4门课程成绩TotalAsSingle'总分EndType注意:(1)自定义类型一般在

标准模块(.BAS)中定义,默认是Public;在窗体必须是Private。(2)自定义类型中的元素类型可以是字符串,但应是定长字符串。(3)不要将自定义类型名和该类型的变量名混淆,前者表示了如同Integ

er、Single等的类型名,后者VB根据变量的类型分配所需的内存空间,存贮数据。(4)自定义类型一般和数组结合使用,简化程序的编写。652.自定义类型变量的声明和使用(1)声明形式:Dim变量名As自定义类型名例DimStudentA

sStudType(2)引用:形式:变量名.元素名例表示Student变量中的姓名,第4门课程的成绩,则表示如下:Student.Name,Student.Mark(4)(3)赋值:如:Student.

Name=―王刚”Student.Mark(4)=98663.3常量与变量一.常量和变量的命名规则常量:在程序运行中其值不可以改变。变量:在程序运行中其存储的值可以改变。命名规则:1.以字母或汉字开头,后可跟汉字、字母、数字或下划线组合,

长度小于等于255个字符;2.不能使用VB中的关键字;3.VB中不区分变量名的大小写.4.为了增加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。如:strMystring、intCount67VB6.0的关键字有:AsBinaryByRefBy

ValDateElseEmptyErrorFalseForFriendGetInputIsLenLetLockMeMidNewNextNothingNullOnOptionOptionalParamArrayPr

intPrivatePropertyPublicResumeSeekSetStaticStepStringThenTimeToTrueWithEvents68二.常量(一)直接常量有数值常量(整数、长整数、定点数和浮点数)、字符串常量、布尔

常量、日期常量(二)符号常量1.系统提供的常量系统定义常量位于对象库中,可通过“对象浏览器”查看.例:vbNormal、vbMinimized、vbMaximized、vbblue等form1.windowsstate=vbmaximized„将窗口

极大化form1.windowsstate=2„与上面的语句等价的692.用户声明常量形式:Const常量名[AS类型]=表达式省略[AS类型],常量的类型由表达式值的类型决定,也可在常量后加类型符。表达式:可以是数值常数、字符串常数以及由运算符组成的表达式。对于数值常数除了可用十进制

表示外,还可以使用十六进制数(数值前加&H)和八进制数(数值前加&O)。为使与变量名区分,一般常量名使用大写字母例ConstMAX=100ConstPI=3.14159ConstPI#=3.14159ConstMAXasin

teger=&O14470三.变量1.用Dim语句显式声明变量形式:Dim变量名[AS类型]Dim变量名类型符例DimiCountAsinteger,sAllsumAssingle等价于DimiCount%,sAllsum!对于字符串变量,根据其长度是否固定,有两种方法

:Dim字符串变量名AsStringDim字符串变量名AsString*字符数2.隐式声明未进行上述的声明而直接使用,其类型为Variant类型。建议不使用。注意:在通用声明处加OptionExplic

it语句可强制显式声明变量。713.4运算符和表达式一.运算符1.算术运算符例:5+10mod10\9/3+2^2结果:10取ia=3722.字符串运算符:&、+“&”和“+”,都是将两个字符串拼接起来。"123"+"456"结果"123456""123"&"456"结果"123456"

区别:若+的两旁的操作数均为数值型则进行算术加;若一个为数字字符型,另一个为数值型,则自动将数字字符转换为数值,然后进行算术加;若一个为非数字字符型,另一个为数值型,则出错。&则不管什么类型,强制转换为字符型进行拼接。例如:"abcdef"&12345'结果为"abcdef12345""a

bcdef"+12345'出错"123"&456'结果为"123456""123"+456'结果为57912000+“123”&100„结果为“12123100”Val(left$(“12345678”,4

)+mid$(“12345678”,4,2))„结果为123445注意:(1)"123"+True'结果为122True转换为数值-1,False转换为数值0(2)使用“&”时,最好在两侧的操作数间加入一个空

格。因为Long类型变量的类型符以及八进制、十六进制数值表示法的起始字符也为“&”。733.关系运算符将两个操作数进行大小比较,结果为逻辑量。运算符含义实例结果=等于"ABCDE"="ABR"FALSE>大于"ABCDE">"ABR"FALSE>=大于等于"bc

">="大小"FALSE<小于23<3FALSE<=小于等于"23"<="3"TRUE<>不等于"abc"<>"ABC"TRUELike字符串匹配"ABCDEFG"Like"*DE*"TRUEIs对象引用比较(1)关系运算符的优先级相同;(2)―Lik

e‖运算符与通配符:“?‖、“*”、“#‖、“[字符列表]‖、“[!字符列表]‖结合使用,常用于模糊查询。其中“?‖表示任何单一字符,“*”表示零个或多个字符,“#‖表示任何一个数字(0~9),[字符列表]表示字符列表中的任何单一字符,[!

字符列表]表示不在字符列表中的任何单一字符。例如,找姓名变量中姓张的学生,则表达式为:姓名Like―张*”,又如找没有张字的学生,表达式为:姓名Like―[!张]‖744.逻辑运算符AND(与)OR(或)XOR(异或)EQV(等价)IMP(蕴含)FFFFF

TTFTFTTFTTFFTTFFTTTTFTT逻辑值说明:1、Not:进行取反运算;2、And:操作数均为真时,结果才为真;3、Or:操作数中有一个为真时,结果为真;4、Xor:操作数相反时,结果才为真;5、Eqv:操作数相同时,结果才

为真;6、Imp:第1个操作数为真,第2个为假时,结果才为假,其余结果均为真。7、优先级:Not>And>OR>Xor>Eqv>Imp75如果逻辑运算符对数值进行运算,则以数字的二进制值逐位进行逻辑运算。(1)And运算符常用于屏蔽某些位。(2)Or运算符常用于把某些位置1。(

3)连续两次进行Xor运算,可恢复原值。例:10and710or776二.表达式1.表达式组成变量、常量、函数、运算符和圆括号2.书写规则(1)运算符不能相邻。例a+-b是错误的。(2)乘号不能省略。例x乘以y应写成:x*y(3)括号必须成对出现,均使用圆括号。(4)表达式从左到右在同一基准

上书写,无高低、大小。3.不同数据类型的转换运算结果的数据类型向精度高的数据类型靠.Integer<Long<Single<Double<Currency4.优先级算术运算符>字符运算符>关系运算符>逻辑运算77表达式书写举例sin(4

5*3.14/180)+(exp(10)+log(10))/sqr(x+y+1)110lne45sin10yxefgabcda*b*c*d/e/f/g或a*b*c*d/(e*f*g)78例:用人单位招聘秘书:年龄小于40岁的女性

,学历专科或本科年龄<40性别=―女”(学历=―专科”学历=―本科”)AndAndOr比a小,比b大用Ora小数b大数a小数b大数比a大,比b小用And例:表示算术表达式:正确的VB表达式:3<=xAndx<=7错误的VB表达式:3<=x<=7或3

<=xOrx<=7考虑:若分别写成:年龄<40And性别=―女”And(学历=―专科”And学历=―本科”)年龄<40Or性别=―女”Or(学历=―专科”Or学历=―本科”)73x1.数学函数:Rnd函数返回0和1(包括0但不包括1)之间的双

精度随机数.例:产生1~100的随机整数:Int(Rnd*100)+1产生100~3000的随机整数:Int(Rnd*2901)+100随机产生“A”~“Z”的字符:Chr(Int(Rnd*26+65

))注意:(1)产生一定范围内的随机整数通常表示为:Int(Rnd*范围)+基数或Int(Rnd*范围+基数)(2)每次运行时,要产生不同序列的随机数,执行Randomize语句。Randomize[number]注:函数名后有

$符号,表示函数返回值为字符串。三、常用内部函数2.转换函数Chr(66)"B"Asc("B")66Asc(Chr(99))99Chr(Asc("K"))"K"Ucase$("abcdefg")"ABCDEFG“3.日期函数:Date返回系统日期Time返回系统时间Now返回系统日

期和时间Year返回年份(1)DateAdd增减日期函数(2)DateDiff间隔日期函数三、常用内部函数4.字符串编码及操作函数(1)字符串编码Windows系统对字符采用了DBCS编码,中文2字节,西文1字节VB中字符Unicode编码,任何字符2字节.Len(―中国good‖)为6LenB

(―中国good‖)为12StrConv()进行DBCS与Unicode之间转换.(2)字符串函数Mid$("ABCDEFG",2,3)"BCD"InStr(2,―EFABCDEFG","EF")7注:函数的自变量中

有M,表示M=0区分大小写,M=1不区分,省略M区分大小写。5.格式输出函数Format()功能:Format()可以使数值、日期或字符串按指定的格式输出。格式:Format(表达式[,格式字符串])其中,表达式:为要格式化的

数值、日期和字符串类型表达式。格式字符串:表示按其指定的格式输出表达式的值。格式字符串有三类:(1)数值格式化:将数值表达式的值按“格式字符串”指定的格式输出。(2)日期和时间格式化(3)字符串格式化格式字符串要加双引号符号作用数值表达式格式字符串显示结果0实际数

字位数小于符号位数,数字前后加0,大于时,整数部分原样输出、小数部分按四舍五入显示1234.5671234.567"00000.0000""000.00"01234.56701234.57#实际数字位数小于符号位数,数字前后不加0,大于时,同上1234

.5671234.567"#####.####""###.##"1234.5671234.57.加小数点1234"0000.00"1234.00,千分位1234.567"##,##0.0000"1,234.5670%数值乘以100,加

百分号1234.567"####.##%"123456.7%$在数字前加$1234.567"$###.##"$1234.57+在数字前加+-1234.567"+###.##"-+1234.57-在数字前加-1234.567"-###.##"-1234.57E+用指数

表示0.1234"0.00E+00"1.23E-01E-与E+相似1234.567".00E-00".12E04常用数值格式符及举例6.Shell函数功能:Shell函数负责执行一个可执行文件(扩展名为.exe、.com、.bat),返回一个Variant,如

果成功,代表这个程序的进程ID,若不成功,则会返回0。形式:Shell(命令字符串[,窗口类型])缺省窗口类型最小化为图标。常量值描述VbHide0窗口被隐藏,且焦点会移到隐式窗口VbNormalFocus1窗口具有焦点

,且会还原到它原来的大小和位置VbMinimizedFocus2窗口会以一个具有焦点的图标来显示VbMaximizedFocus3窗口是一个具焦点的最大化窗口VbNormalNoFocus4窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动VbMinimizedNoFocus6窗口会

以一个图标来显示,而当前活动的窗口仍然保持活动Shell函数窗口类型X=shell(―c:\windows\pbrush.exe‖,1)Y=shell(―c:\windows\write.exe‖,1)Z=shell(―C:

\ProgramFiles\MicrosoftOffice\Office\winword.exe‖,1)提示:如果不知道应用程序的路径名,可用Start命令启动程序i=Shell(start&"cal

c.exe");i=Shell(start&―vb6.exe―)举例:i=Shell("c:\windows\calc.exe",1)j=Shell("c:\command.com",1)863.5基本语句3.5.1赋值语句形式:[

LET]变量名=表达式作用:将表达式的值赋值给变量名.一般用于给变量赋值或对控件设定属性值.例:sRate!=0.1Text1.Text="欢迎使用VisualBasic6.0”注意:1、当表达式的类型与变量的类

型不一致时,强制转换成左边的精度。如:iA%=10/3iA中的结果为32、虽然赋值号与关系运算符等于号都用“=”表示,VB系统会根据所处的位置自动判断是何种意义的符号。3、赋值号左边只能是变量,不能是常量或表达式。4、不能在一句赋值语句中,同时给多个变量赋值。873.5.2人机

交互函数和过程VB与用户之间的直接交互是通过InputBox()函数、MsgBox()函数和MsgBox过程进行的。1.InputBox函数InputBox(提示[,标题][,缺省][,x坐标位置][,y坐标位置])其中:提示提示信息,标题对话框标题,缺省输入区缺

省值函数返回字符类型.例要在屏幕上显示图示的对话框:88相应的语句如下:DimstrNameAsString*40strName=InputBox(―请输入你的姓名”+vbCrLf+―然后单击确定”,―输

入框”)也可以使用如下语句:DimstrNameAsString*40,strS1AsString*40strS1=―请输入你的姓名”+Chr(13)+Chr(10)+―然后单击确定”strName=InputBox(strS1,“输入框

”,,100,100)当键盘输入“王晓明”后,变量strName获得键盘输入的值.892.MsgBox函数和MsgBox过程函数形式:变量[%]=MsgBox(提示[,按钮][,标题])过程形式:MsgBox提示[,按钮][,标题]按钮值如下:函数返回所选按钮整数值:90例3.2编一帐号和密

码检验程序。要求:帐号不超过6位数字,有错,清除原内容再输入.密码输入时在屏幕上以“*”代替;若密码错,显示有关信息,选择“重试”按钮,清除原内容再输入,选择“取消”按钮,停止运行。分析:帐号6位,MaxLength为6,LostFocus判断数字IsNumeric函数密码PassWo

rdChar为“*”,MsgBox函数设置密码错对话框.913.5.3选择结构1.If…Then语句(单分支结构)If<表达式>Then语句块EndIf或If<表达式>Then<语句>例:已知两个数x和y,比较它们的大小,使得x大于y.Ifx<yThent=xx=

yy=tEndIf或Ifx<yThent=x:x=y:y=t922.If…Then…Else语句(双分支结构)(1)If<表达式>Then<语句块1>Else<语句块2>EndIf(2)If<表达式>Th

en<语句1>Else<语句2>计算分段函数表达式F图1-3-9双分支结构语句块1T语句块2yxxxxxxxsincos231030单分支结构实现:[ifx=0then]y=cos(x)-x^3+3*xIfx

<>0Theny=sin(x)+sqr(x*x+1)双分支结构实现:Ifx<>0Theny=sin(x)+sqr(x*x+1)Elsey=cos(x)-x^3+3*xEndIf933.If…Then…Els

eIf语句(多分支结构)形式:If<表达式1>Then<语句块1>ElseIf<表达式2>Then<语句块2>…[Else语句块n+1]EndIf表达式1表达式2表达式nTFTF图1-3-10多分支结构语句块n语句块n+1语句块2

语句块1F„T94例已知变量strC中存放了一个字符,判断该字符是字母字符、数字字符还是其他字符。用多分支结构实现:IfUcase(strC)>="A"AndUcase(strC)<="Z"ThenPrintstrC+"是字母字符"ElseIfstr

C>="0"AndstrC<="9"ThenPrintstrC+"是数字字符"ElsePrintstrC+"其他字符"EndIf不管有几个分支,依次判断,当某条件满足,执行相应的语句,其余分支不再执行;若条件都不满足,且有Else子句,则执行该语句

块,否则什么也不执行。.ElseIf不能写成ElseIf。95例已知百分制成绩mark,显示对应的五级制成绩哪些正确,哪些错误?方法一Ifmark>=90ThenPrint"优"ElseIfmark>=80ThenPrint"良"El

seIfmark>=70ThenPrint"中"ElseIfmark>=60ThenPrint"及格"ElsePrint"不及格"EndIf方法二Ifmark<60ThenPrint"不及格"ElseIfmark<70ThenPrint"及格"ElseIfmark<80ThenPrint"中"El

seIfmark<90ThenPrint"良"ElsePrint"优"EndIf方法三Ifmark>=60ThenPrint"及格"ElseIfmark>=70ThenPrint"中"ElseIfmark>=80ThenPrint"良"ElseIfmark>=90ThenPrint"优"Else

Print"不及格"EndIf正确:方法一、二错误:方法三964.If语句的嵌套If语句的嵌套是指If或Else后面的语句块中又包含If语句。形式如下:If<表达式1>ThenIf<表达式11>Then…EndIf…EndIfTx>yTz为最小数T使得x>yFFFx>y>zx<yx与y交

换y<zy与z交换x<yx与y交换例已知x,y,z三个数,使得x>y>z用一个IF语句和一个嵌套的IF语句实现Ifx<yThent=x:x=y:y=tIfy<zThent=y:y=z:z=tIfx<yThent=x:x=y:y=tEndIfEndIfIf语句的嵌套注意事项:书写锯齿型;E

ndIf与它前面最近的if配对。97<表达式列表>:与<变量或表达式>的类型必须相同,可以是下面四种形式之一:表达式例:"A"一组枚举表达式(用逗号分隔)2,4,6,8表达式1To表达式260To100Is关系运算符表达式Is<605.SelectC

ase语句(情况语句)形式:SelectCase变量或表达式Case表达式列表1语句块1Case表达式列表2语句块2…[CaseElse语句块n+1]EndSelect变量:只能含有一个表达式:数值型或字符串98注意:关键字I

s定义条件时,只能是简单的条件,不能用逻辑运算符将两个或多个简单的条件组合在一起。例如“CaseIs>20andIs<40”是不合法的。而“CaseIs<2,12,13,15,Is>20”是正确的。99例变量strC中存放了一个字符,判断该字符类型。用多分支结构实现:IfUcase(

strC)>="A"AndUcase(strC)<="Z"ThenPrintstrC+"是字母字符"ElseIfstrC>="0"AndstrC<="9"ThenPrintstrC+"是数字字符"Else

PrintstrC+"其他字符"EndIf用SelectCase语句实现:SelectCasestrCCase"a"To"z","A"To"Z"PrintstrC+"是字母字符"Case"0"To"9"PrintstrC+"是数字字符"CaseElsePrints

trC+"其他字符"EndSelect100例:已知坐标点(x,y),判断其落在哪个象限。哪个能实现,哪个不能实现?方法一Ifx>0Andy>0ThenPrint"在第一象限"ElseIfx<0Andy>0ThenPrint"在第二象限"ElseIfx<0Andy<0ThenPrint"在第

三象限"ElseIfx>0Andy<0ThenPrint"在第四象限"EndIf方法二SelectCasex,yCasex>0Andy>0Print"在第一象限"Casex<0Andy>0Print"在第二象

限"Casex<0Andy<0Print"在第三象限"Casex>0Andy<0Print"在第四象限"EndSelect方法二代码错误:1.SelectCase后不能出现多个变量;2.Case后不能出现变量及有关运算符。比较:SelectCase结

构清晰,但使用受到限制,因此,凡是对多个变量的条件判断只能用If的多分支结构来实现。101例由计算机来当一年级的算术老师,要求给出一系列的1~10的操作数和运算符,学生输入该题的答案,计算机根据学生的答案判断正确与否,当结束时给出成绩。分析:产生1~10操作数,可通过Int(10*

Rnd+1)实现设置的控件名Label1Text1Picture1Command11026.条件函数(1)IIf函数形式是:IIf(表达式,当表达式为True时的值,当表达式为False时的值)例如,求x,y中大的数,放入Tmax变量中,语句如下:Tmax=IIf(x>y,x,y)(2)Swit

ch函数形式是:Switch(条件表达式1,条件表达式1为True时的值[,条件表达式2,条件表达式2为True时的值……])103(3)Choose函数形式是:Choose(数字类型变量,值为1的

返回值,值为2的返回值……)例如:Nop是1-4的值,转换成+、-、×、÷运算符Op=Choose(Nop,“+","-","×","÷")当值为1,返回字符串“+”,然后放入Op变量中,值为2,返回字符串“-”,依次类推;当Nop是1-4的非整数,系统自动取Nop的整数办法在判断;若No

p不在1-4之间,函数返回Null值。1041.在选择结构中缺少配对的结束语句对多行式的If块语句中,应有配对的EndIf语句结束。2.多边选择ElseIf关键字的书写和条件表达式的表示ElseIf不要写成ElseIf;多个条件

表达式次序问题3.SelectCase语句的使用SelectCase后不能出现多个变量;Case子句后不能出现变量本节常见错误1053.5.4循环结构1.For循环语句(一般用于循环次数已知)形式For循环变量=初值to终值[Step

步长]语句块[ExitFor]语句块Next循环变量循环变量<=终值语句块ExitFor语句块循环变量加步长TF循环变量得初值循环体例计算1~100的奇数和Dimi%,s%等价于:Dimi%,s%s=0s=0:i=1Fori=1To100

step2re:Ifi<=100Thens=s+is=s+iNextii=i+2GoToreEndIf106>0初值<终值=1时,可省略<0初值>终值=0死循环循环次数)1(步长初值终值Int要注意:出了循环,循环控制变量值的问题。例程序段:Fori=2

To13Step3循环执行次数Printi,输出i的值分别为:Nexti25811Print:Print―I=―,i出了循环输出为:I=14在循环体内对循环控制变量可多次引用;但最好不要对其赋值,否则影响原来的循环控制规律。4)1(3213Int步长107例改变循环控制变

量对循环的影响。PrivateSubCommand1_Click()j=0Fori=1To20Step2i=i+3j=j+1Print"第";j;"次循环i=";iNextiPrint"退出循环后i=";iEndSub正常情况:i

=1,3,5,7,9,11,13,15,17,19现在:i=4,9,14,19例输出可打印的ASCII码字符与它的编码值。1082.Do…Loop循环语句(用于控制循环次数未知)形式1:Do{While|Unt

il}<条件>语句块[ExitDo语句块]Loop形式2:Do语句块[ExitDo语句块]Loop{While|Until}<条件>表达式列表1FTFTExitDo语句块语句块ExitDo语句块语句块表达式列表1图1-3-16

Do„LoopWhile图1-3-15DoWhile„Loop109例我国有13亿人口,按人口年增长0.8%计算,多少年后我国人口超过26亿。分析:解此问题两种方法,可根据公式:26=13*(1+0.0

08)n直接利用标准对数函数求得;也可利用循环求得,程序如下:PrivateSubCommand1_Click()x=13n=0DoWhilex<26x=x*1.008n=n+1LoopPrintn,xEndSub110例用辗转相除法求两

自然数m,n的最大公约数和最小公倍数。分析:求最大公约数的算法思想:(1)对于已知两数m,n,使得m>n;(2)m除以n得余数r;(3)若r=0,则n为最大公约数结束;否则执行(4);(4)mn,nr,再重复执行(2)。例求m=14,n=6的最大公约数.Ifm<nThent

=m:m=n:n=tr=mmodnDoWhile(r<>0)m=nn=rr=mmodnLoopPrint"最大公约数=",nmnr1462620辗转相减法m=m-nm>nn=n-mn>mm、n为公约数m

=nDoWhilem<>nmnIfm>nThen146m=m–n86Else26n=n–m24EndIf22Loop1113、While…Wend循环:(类似于DoWhile…Loop)格式为:While<表达式><语句

序列>Wend执行过程:先计算表达式的值,如果表达式的值为True,则执行循环体,遇到Wend语句后,返回到While语句并再对条件进行测试,如为True,则继续执行循环体,如为False,则退出循环体。例:计算1+2+3+……+100Dimiasin

teger,sasintegeri=1s=0Whilei<=100s=s+ii=i+1Wend1124.循环的嵌套一个循环体内又包含了一个完整的循环结构称为循环的嵌套.例打印九九乘法表.Fori=1To9Forj=1To9se=i&―×"&j&"="&i*jPict

ure1.PrintTab((j-1)*9+1);se;NextjPicture1.PrintNexti思考:打印上三角或下三角程序如何改动?上三角Forj=iTo9下三角Forj=1Toi113Forii=1To10Forjj=1To20…NextiiNext

jjForii=1To10Forii=1To20…NextiiNextiiForii=1To10Forjj=1To20…NextjjNextiiForii=1To10…NextiiForii=1To10…Nextii对于

循环的嵌套,要注意以下事项:内循环变量与外循环变量不能同名;外循环必须完全包含内循环,不能交叉;不能从循环体外转向循环体内,反之则可以。正确错误114本节常见错误1.不循环或死循环的问题主要是循

环条件、循环初值、循环终值、循环步长的设置有问题。2.循环结构中缺少配对的结束语句For少配对的Next3.循环嵌套时,内外循环交叉4.累加、连乘时,存放累加、连乘结果的变量赋初值问题(1)一重循环在一重循环中,存放累加

、连乘结果的变量初值设置应在循环语句前。(2)多重循环:这要视具体问题分别对待。如:1!+2!+3!+…+n!5.大数相乘产生“溢出”问题1153.5.5其他辅助控制语句1.GoTo语句形式:GoTo{标号|行号}作用

:无条件地转移到标号或行号指定的那行语句.标号是一个字符序列,行号是一个数字序列.2.开关语句:On-GoTo语句3.Exit语句多种形式:ExitFor、ExitDo、ExitSub、ExitFunction等。作用:退出某种控制结构的执行。4.End语句多种形

式:End、EndIf、EndSelect、EndWith、EndType、EndSub、EndFunction、作用:End结束一个程序的运行;其余表示某个结构的结束,与对应的结构语句配对出现。1166.With语句形式如下:With对象语句块EndWith作

用:对某个对象执行一系列的操作,而不用重复指出对象的名称。WithLabel1.Height=2000.Width=2000.FontSize=22.Caption="MyLabel"EndWithLabel1.Height=2000Label1.Width=2000Label1.FontSize

=22Label1.Caption="MyLabel"等价1173.6数组1、引例例:若要求100个学生的平均成绩,然后统计高于平均分的人数。aver=0Fori=1To100mark=InputBox("输入"+i+"位学生的成绩")aver=aver+markNextiaver=aver/1

00但若要统计高于平均分的人数,则无法实现。已有知识解决方法:再重复输入成绩,带来两个问题:(1)输入数据的工作量成倍增加;(2)若本次输入的成绩与上次不同,则统计的结果不正确。解决此问题的根本方法,引入数组,始终保持输入的数据,一次输入,多次使用。118

引入数组dimmark(1to100)asintegerdimiasinteger,n%,aver!n=0fori=1to100aver=aver+mark(i)nextiaver=aver/100fori=1to

100ifmark(i)>averthenn=n+1nexti1192、数组的概念数组不是一种数据类型,而是一组相同类型的变量的集合。在程序中使用数组的最大好处是用一个数组名代表逻辑上相关的一批数据,用下标表示该数组中的各个元素,和循环语句结合使用,使得程序书写简洁。数组

元素:数组中的某一个数据项。数组元素的使用同简单变量的使用。数组:必须先声明后使用。两类数组:静态(定长)数组、动态(可变长)数组。1203、静态数组及声明静态数组:在声明时已确定了数组元素个数。形式:Dim数组名(下标1[,下标2…])

[As类型]维数:几个下标为几维数组,最多60维。下标:[下界To]上界下界最小为-32768,上界最大为32767,省略下界为0。下标必须为常数,不可以为表达式或变量。每一维大小:上界-下界+1数组大小:每一维大小的乘积As类型:如果省略,默认为变体类型例:Dimmark(1t

o100)AsInteger121DimlArray(0To3,0To4)AsLong共有4×5个元素等价于:DimlArray(3,4)AsLong注意:(1)下界缺省为0,也可再重新定义数组的缺省下界为1。OptionBase1122注意:(2)在静态数组声明时的下标只能是

常数,而在其他地方出现的数组元素的下标可以是变量,要加以区分。如:n=Inputbox(“输入n”)Dimx(n)AsSingle'错误的声明,下标是变量x(n)=100'数组元素的下标可以是变量,但要防止下标越界的错误发生(3)在数组声明中的下标说明了数组的整

体,即每维的大小;而在程序其他地方出现的下标表示数组中的一个元素。两者写法形式相同,但意义不同。例如:Dimx(10)AsInteger'声明了x数组有11个元素x(10)=100'对x(10)这个数

组元素赋值1234、动态数组及声明动态数组是指在声明数组时未给出数组的大小(省略括号中的下标),当要使用它时,随时用ReDim语句重新指出数组大小。形式如下:Dim数组名()ReDim数组名(下标1[,下标2

…])[As类型]例SubForm_Load()Dimx()AsSingle…n=Inputbox(“输入n”)ReDimx(n)…EndSub124注意Dim、Private、Public变量声明语句是

说明性语句,可出现在过程内或通用声明段;ReDim语句是执行语句,只能出现在过程内。在过程中可多次使用ReDim来改变数组的大小和维数。使用ReDim语句会使原来数组中的值丢失,可以在ReDim语句后加Preserve参

数来保留数组中的数据。使用Preserve只能改变最后一维的大小,前面几维大小不能改变。ReDim中的下标可以是常量,也可以是有了确定值的变量。静态数组在程序编译时分配存储单元,动态数组在运行时分配存储单元。125例:Redim和Preserve语句的使用Dima

()asintegerPrivateSubForm_Click()Dima()AsIntegerReDima(3,2)Fori=0To3Forj=0To2a(i,j)=i*jPrint"a(";i;",";j;")=";a(i,j)

;""NextjNextiEndSub126PrivateSubForm_Click()Dima()AsIntegerReDima(3,2)Fori=0To3Forj=0To2a(i,j)=i*jNextjNextiReDimPreservea(

3,4)Forj=3To4a(3,j)=j+10NextjFori=0To3Forj=0To4Print"a(";i;",";j;")=";a(i,j);""NextjNextiEndSub1275、数组的基本操作应掌握的基本操作有:数组初始化、数组输入、输出、求数组中最

大(最小)元素及下标、求和、平均值、排序和查找等。A.数组元素的赋初值(1)用循环Dimia(1to10)AsIntegerFori=1To10ia(i)=0Nexti(2)Array函数DimibAsVariant

ib=Array(―abc‖,―def‖,―67‖)‗ib数组有3个元素,上界为2Fori=0ToUBound(ib)Picture1.Printib(i);"";Nexti128注意利用Array对数

组各元素赋值,声明的数组是可变数组或连圆括号都可省的数组,并且其类型只能是Variant。数组的下界为零,上界由Array函数括号内的参数个数决定,也可通过函数Ubound获得上界,Lbound获得下界。赋值号左

边的数组只能声明为Variant的可调数组或简单变量。赋值号两边的数据类型必须一致。B.数组的赋值数组直接对数组的赋值:Dima()AsVariant,b()AsVariant,i%a=Array(1,2,3,4,

5)ReDimb(UBound(a))b=aFori=0ToUBound(a)b(i)=a(i)Nexti129C.数组的输入:可通过文本框,也可通过inputbox函数输入。D.数组的输出:输出方阵SC中的下三角元素Fori=0To4Forj=0

Toisc(i,j)=i*5+jPrintsc(i,j);"";NextjPrint'换行Nexti130E.求数组中最大元素及所在下标及各元素之和DimMax%,iMax%,s%,iA(1to10)AsIntegerMax=iA(1):iMax=1

:s=iA(1)Fori=2To10s=s+iA(i)IfiA(i)>MaxThenMax=iA(i)iMax=iEndIfNextiF.将数组中各元素交换Fori=1To10\2t=iA(i)iA(i)=iA(10-i+1)iA(10-i+1)=tNexti1316、数组的应用

a.统计:输入一串字符,统计各字母出现的次数,不区分字母大小写。分析:统计26个字母出现的个数,先声明一个具有26个元素的数组,每个元素的下标表示对应的字母,元素的值表示对应字母出现的次数。从输入的

字符串中逐一取出字符,转换成大写字符(不区分大小写),进行判断。Asc(“A”)=65Asc(“Z”)=122Asc(―a‖)=97Asc(“z”)=90Dima(1to26)asintegerDimcasstring*1Le=len(Text1)ForI

=1Tolec=UCase(Mid(Text1,I,1))Ifc>="A"Andc<="Z"Thenj=Asc(c)-65+1a(j)=a(j)+1EndIfNextI132原始数据869327a(1)a(2)a(3)a(4)a(5)a(6)第1趟交换后269387

a(2)a(3)a(4)a(5)a(6)第2趟交换后239687a(3)a(4)a(5)a(6)第3趟交换后236987a(4)a(5)a(6)第4趟交换后236789a(5)a(6)第5趟无交换236789图1.3.25排序过程示意图b.数

组排序(选择法)对已知存放在数组中的n个数,用选择法按递增顺序排序。(1)从n个数中选出最小数的下标(递增),然后将最小数与第1个数交换位置;(2)除第1个数外,其余n-1个数再按(1)的方法选出次小的数,与第2个数交换位置;(3)重复(1)n-1遍,最后构成递增序列。Fori=

1Ton-1‘进行n-1轮比较iMin=i‘对第i轮比较时,初始假定第i个元素最小Forj=i+1Ton‘在数组i~n个元素中选最小元素的下标IfiA(j)<iA(iMin)TheniMin=jNextjt=iA(i):iA(i)=iA(iMin):iA(iMin)=t‘将最小元素与第i个元素

交换Nexti133c.排序(冒泡法)选择法排序在每一轮排序时找最小(递增次序)数的下标,出了内循环(一轮排序结束),再交换最小数的位置;而冒泡法排序在每一轮排序时只要将第一个与其它几个比较(或者将相

邻的数两两比较),只要次序不对就交换,出了内循环,最小数已冒出。Fori=1Ton-1'进行n-1轮比较Forj=i+1Ton‗将第一个与i+1~n个元素进行比较IfiA(j)<iA(i)Then'若次序不对,则马上进行交换位置

t=iA(j):iA(j)=iA(i):iA(i)=tEndIfNextj'出了内循环,一轮排序结束,最小数已冒到最上面Nexti134d.排序(冒泡法)冒泡法排序:将相邻的两个数两两比较,只要次序不对就交换,出了内循环,最小数已冒出。排序进行的过程见下表。Fori=1Ton-

1'进行n-1轮比较Forj=nToi+1step-1‗从n~i个元素进行两两比较IfiA(j)<iA(j-1)Then'若次序不对,则马上进行交换位置t=iA(j):iA(j)=iA(j-1):iA(j-1)=tEndIfNextj'出了内循环

,一轮排序结束,最小数已冒到最上面Nexti原始数据869327a(1)a(2)a(3)a(4)a(5)a(6)第1趟排序286937a(2)a(3)a(4)a(5)a(6)第2趟排序238697a(3)a(4

)a(5)a(6)第3趟排序236879a(4)a(5)a(6)第4趟排序236789a(5)a(6)第5趟排序236789135e.数组元素的插入与删除:(1)插入在有序数组a(1ton)(原有n-1个元素)插入一个值Key元素,算法:•查找要插入的位置k(1<=k<=n

-1)•腾出位置,把最后一个元素开始到第K个元素往后移动一个位置•第k个元素的位置腾出,就可将数据Key插入(2)删除要找到欲删除的元素的位置k;然后从k+1到n个位置开始向前移动;最后将数组元素减1。147101314

16192225k①②③④⑤147101316192225④③②①14k136删除说明:将数组元素减1,只要将数组声明为动态数组,最后重新声明,并保留原来的值即可。如:Dima()‗声明为动态数组…R

edima(1ton)‘声明为有n个元素的数组…‘查找到要删除的元素下标为kfori=k+1ton‗从k+1个元素开始往前移a(i-1)=a(i)nextiRedimPreservea(1ton-1)

‘最后将数组元素减1,并保留原来的值…‗再重新输出数组删除后的元素1377、控件数组a、控件数组的概念:控件数组是由一组相同类型的控件组成。它们共用一个控件名,具有相同的属性,建立时系统给每个元素赋一个唯一的索引号(Index),通过属性窗口的Index属性,可以知

道该控件的下标是多少,第1个下标是0。控件数组适用于若干个控件执行的操作相似的场合,控件数组共享同样的事件过程,通过返回的下标值区分控件数组中的各个元素。例:PrivateSubcmdName_Click(Ind

exAsInteger)…IfIndex=3then„处理第四个命令按钮的操作EndIf…EndSubb、控件数组的建立:(1)设计时建立控件数组在窗体上画出控件,进行属性设置,这是建立的第一个元素选中该控件,进行“Copy‖进行

若干次和“Paste‖操作建立了所需个数的控件数组元素。进行事件过程的编程。138例建立含有四个命令按钮的控件数组,当单击某个命令按钮,分别显示不同的图形或结束操作。PrivateSubCommand1_Click(IndexAsInteger)SelectCase

IndexCase0……"画直线"Case1……"画矩形"Case2……―画圆”CaseElseEndEndSelectEndSub控件名IndexCaptionCommand10直线Command11矩形Command12圆Command13结

束Picture1空白——139PrivateSubcmd_Click(IndexAsInteger)Pic.ClsPic.FillStyle=5SelectCaseIndexCase0Pic.Print"画直线"Pic.Line(2,2)-(7

,7)Case1Pic.Print"画矩形"Pic.Line(2,2)-(7,7),,BFCase2Pic.Print"画圆"Pic.Circle(4.5,4.5),3.5,,,,0.4CaseElseEndEndSelectEndSubPrivateSubForm

_Load()Pic.Scale(0,0)-(10,10)EndSub140(2)运行时添加控件数组建立的步骤如下:在窗体上画出某控件,设置该控件的Index值为0,表示该控件为数组,这是建立的第一个元素。在编程时通过Load方法添加其余的若干个元

素,也可以通过Unload方法删除某个添加的元素每个新添加的控件数组通过Left和Top属性确定其在窗体的位置,并将Visible属性设置为True。例利用在运行时产生控件数组,构成一个国际象棋棋盘。要求:(1)在设计时窗体上放一个Label控件,设

置其Index属性为0,BackColor为黑色。(2)程序运行时自动产生64个Label控件数组元素,BackColor黑白交替。(3)当运行时单击棋格,显示对应的序号,并且将所有棋格颜色变反。141例建立一个程序模拟计算器,进行正整数的输入和四则运算

,还可以进行八、十六进制数的转换。它包括3个Command控件数组,即:运算符按钮Operator:在设计时建立;数字按钮Number:设计时建立一个元素,显示“0‖,运行时添加其余9个元素;数制转换按钮Tran:在设计时建立。默认控件名设置的控件名(Name)下标范围(Index)标题(

Caption)Command1Operator0~4+-??=Command2Number0~90123456789Command3Tran0~1OHCommand4Clea无定义CEtext1disp无定义无定义控件设置142

界面设计如下:运行界面如下:143数组中常见错误和注意事项1.静态数组声明下标出现变量n=InputBox("输入数组的上界")Dima(1Ton)AsInteger2.数组下标越界引用的下标比数组声明时的下标范围

大或小。Dima(1To30)AsLong,i%a(1)=1:a(2)=1Fori=2To30a(i)=a(i-2)+a(i-1)a(0)不存在Nexti3.数组维数错数组声明时的维数与引用数组元素时的维数不一致。Dima(3,5)AsLonga(i)=104.Aarry函数使用问题只能对Va

riant的变量或动态数组赋值。5.获得数组的上界、下界Ubound、Lbound函数1443.7过程除了系统提供的内部函数过程和事件过程外,用户可自定义过程:以Sub保留字开始的为子过程以Function保

留字开始的为函数过程以Property保留字开始的为属性过程以Event保留字开始的为事件过程主要介绍SUB子过程和Function函数过程145一、函数过程:引例已知多边形的各条边的长度,要计算多边形的面积。计算多边形面积,可将多边形分解成若干个三角形。计算三角形面积的公式

如下:abcdefgS1S2S3)(21))()((zyxczcycxccareaxyz定义函数过程areaPublicFunctionarea(x!,y!,z!)AsSingleDimc!c=1/2*(x+y+z)area=Sqr(c*(c-x)*(c-y)*(c-z))End

Function调用函数过程:Subcommand1_click()……输入若干个三角形边长S1=area(a,b,c)S2=area(c,d,e)S3=area(e,f,g)PrintS1+S2+S3E

ndSub计算三个三角形的面积,使用的公式相同,不同的仅仅是边长,因此首先定义一个求三角形面积的函数过程,然后像调用标准函数一样多次调用它。1461、函数过程的定义:自定义函数过程:(1)利用“工具”

菜单下的“添加过程”命令定义,生成一个函数的框架(2)利用代码窗口直接定义函数过程形式:[Static][Public][Private]Function函数过程名([参数列表])[As类型]局部变量或常数定义语句块函数名=返回值函

数过程体[ExitFunction]语句块函数名=返回值EndFunction函数过程名:命名规则同变量名As类型:函数返回值的类型,缺省为变体类型。参数列表形式:[ByVal]变量名[()][As类型]称为形参或哑元,只能

是变量或数组名(这时要加“()‖),仅表示参数的个数、类型,无值。Byval表参数是值传递,否则是地址传递。无参时,函数名后的括号不能省略,这是函数过程的标志。函数名=返回值在函数体内至少对函数名赋值一次[ExitFunction]:表示退出函数过程1472、函数过程的调用形式:

变量名=函数过程名([参数列表])参数列表:称为实参或实元,它必须与形参个数相同,位置与类型一一对应,可以是同类型的常量、变量、表达式。函数调用不能单独调用,必须作为表达式或表达式的一部分,再配以其他的语法成分构成语句。PrivateSubCommand1_Click()s=―VB程序设计

教程5.0版”ss=MyReplace(s,"5.0","6.0")EndSubFunctionMyReplace(s$,OldS$,NewS$)Dimi%,lenOldS%lenOldS=Len(OldS)i=InStr(s,O

ldS)DoWhilei>0s=Left(s,i-1)+NewS+Mid(s,i+lenOldS)i=InStr(s,OldS)LoopMyReplace=sEndFunctionPrivateSubCommand1_Click()s=―VB程序设计教程5.0版”ss=MyReplace(

s,"5.0","6.0")S‖5.0‖‖6.0‖MyReplace(s$,OldS$,NewS$)程序运行的流程:148二、子过程函数过程给编程带来了优点但也有不足:(1)若编写过程,不是为了获得某个函数值,而是为了某种功能的处理,如控件的移动;(2)或者要获得多个结果,

如对一组数的排序等。此时用函数过程,有些不便。VB中提供了功能更强、使用更灵活的子过程。1.引例编写一个两个数交换的过程供多次调用。Swap(x,y)子过程的定义主调程序调用Swap子过程PublicSubSwap(x,y)PrivateSubFor

m_Click()DimtDima,bt=xa=10x=yb=20y=tCallSwap(a,b)‘或者Swapa,bEndSubPrint"a=";a,",b=";bEndSub1492.子过程定义:[Static][Publi

c][Private]Sub子过程名[(参数列表)]局部变量或常数定义语句块[ExitSub]语句块EndSub子过程体子过程名、参数列表规定同函数过程中对应项的规定,但当无形参时,括号也应无4.子过程与函数过程区别:(1)函数过程名有值,有类型,在函数体内至少赋值一次;子过

程名无值,无类型,在子过程体内不能对子过程名赋值;(2)调用时,子过程调用是一句独立的语句。函数过程不能作为单独的语句加以调用,必须参与表达式运算。(3)用函数过程和子过程没有严格的规定,但只要能用函数过程定义的,肯定能用子过程定义,反之不一定。即子过程适用

面广。一般当过程有一个函数值,使用函数过程较直观;反之若过程无返回值,或有多个返回值,使用子过程较直观3.子过程的调用子过程名[参数列表]或Call子过程名(参数列表)150例分别编一计算某级数部分和的子过程和函数过程,并调用。级

数为:精度为:...!...!212nxxxneps!nxn函数过程实现求部分级数和Functionjishu1(x!,eps#)AsDoubleDimn%,s#,t#n=1:s=0:t=1DoWh

ile(Abs(t)>=eps)s=s+tt=t*x/nn=n+1Loopjishu1=sEndFunction子过程实现求部分级数和Subjishu2(s#,x!,eps#)Dimn%,t#n=1:s=0:

t=1DoWhile(Abs(t)>=eps)s=s+tt=t*x/nn=n+1LoopEndSubf1=jishu1(2,0.000001)‘调用函数过程Calljishu2(f2,2,0.000001)‘调用子过程或jishu2f2,2,0

.00001151程序运行流程:PrivateSubCommand1_Click()Dimf1#,f2#f1=jishu1(2,0.000001)Calljishu2(f2,2,0.000001)Pri

nt"f1=";f1,"f2=";f2EndSubSubjishu2(s#,x!,eps#)…s=表达式EndSub找子过程名调用jishu2⑥①Functionjishu1(x!,eps#)AsDoubl…jishu1=表达式EndFunction找函数名调用jishu1②⑤⑦⑧函数名带了值

返回③④⑨152三、参数传递在调用过程时,一般主调过程与被调过程之间有数据传递,即主调过程的实参传递给被调过程的形参(虚参),完成实参与形参的结合,然后执行被调过程体。在VB中,实参与形参的结合有两种方法:传址(ByRef)与传值(ByVal),其中传址又称为引用,是默认的方法。

区分两种结合的方法是在要使用传值的形参前加有“ByVal‖关键字。1.传址与传值传址:形参得到的是实参的地址,形参值的改变同时也改变实参的值。传值:形参得到的是实参的值,形参值的改变不会影响实参的值。选用传值还是传址的使用规则:(1)形参是数组、自定义类型时只能用传址方式,若要将过程中的结果返

回给主调程序,则形参必须是传址方式。这时实参必须是同类型的变量名,不能是常量或表达式。(2)若形参不是(1)中的两种情况,一般应选用传值方式。这样可增加程序的可靠性和便于调试,减少各过程间的关联。153例两个变量的交换SubSwap1

(ByValx%,ByValy%)t%=x:x=y:y=tEndSubSubSwap2(x%,y%)t%=x:x=y:y=tEndSubPrivateSubCommand1_Click()a%=10:b%=20Swap1a,b'传值Print"A1=";a

,"B1=";ba=10:b=20Swap2a,b'传址Print"A2=";a,"B2=";bEndSuba的地址101010aaxx形参实参ByVal传值传地址运行结果A1=10B1=20A2=20B2=101542.数组参数的传

递在VB中允许参数是数组,数组只能通过传址方式进行传递。在传递数组时要注意:•在实参和形参中可只写数组名,或忽略维数的定义,但圆括号不能省。•被调过程可通过Lbound和Ubound函数确定实参数组的下、上界。例编一函数tim,求任意一维数组中各元素之积。调用tim,求和Functio

ntim(a()AsInteger)Dimt#,i%t=1Fori=Lbound(a)ToUbound(a)t=t*a(i)Nextitim=tEndFunction511iiat832i

ibt调用:SubCommand1_Click()Dima%(1To5),b%(3To8)…t1#=tim(a())t2#=tim(b())Printt1,t2EndSub155四、变量、过程的作用域作用域:变量、过程可被访问的范围。变量、

过程随所处的位置不同,可被访问的范围不同。1.过程的作用域窗体/模块级:加Private关键字的过程,只能被定义的窗体或模块中的过程调用。全局级:加Public关键字(缺省)的过程,可供该应用程序的所有窗体和所有标准模块中的过程调用。1562.变量的作用域局部变量:在过程

内用Dim声明的变量(或不加声明直接使用的变量),只能在本过程中使用。窗体/模块级变量:在“通用声明”段中用Dim语句或用Private语句声明的变量,可被本窗体/模块的任何过程访问。全局变量:在“通用声明”段中用Public语句声明的变量,可被本应用程序的任何过程或函数访问。157例如在

下面一个标准模块文件中不同级的变量声明:PublicPaAsinteger'全局变量PrivateMbAsstring*10'窗体/模块级变量SubF1()DimFaAsinteger'局部变量…EndSubSubF2()DimFbAsSingle'局部变量…EndSub158若在不同级声明相

同的变量名,系统按局部、窗体/模块、全局次序访问(即优先访问作用域小的变量名)。如:PublicTempAsinteger'全局变量SubForm_Load()DimTempAsInteger'局部变量Tem

p=10'访问局部变量Form1.Temp=20'访问全局变量必须加窗体名PrintForm1.Temp,Temp'显示2010EndSub1593.静态变量局部变量声明:Dim声明,随过程的调用而分配存储单元,每次调用都对变量初始化;过程体结束,变量的内容自动消失,存储

单元释放。Static声明,每次调用过程,变量保持原来的值。声明形式:Static变量名[AS类型]StaticFunction函数过程名([参数列表])[As类型]StaticSub子过程名[(参数列表)]过程名前加Static,表示该过程内的局部变量都是静态变量。例比较Dim和

Static的区别。PrivateSubForm_Click()Dimi%,isum%Fori=1To5isum=sum(i)Printisum;NextiEndSubPrivateFunctionsum(nAsInteger)DimjA

sIntegerj=j+nsum=jEndFunction结果为:12345StaticjAsInteger,结果?结果为:1361015160Subf1(x)…x=f2(xx)*3…EndSubSubCo

mmand1_Click()……Callf1(y)EndSubFunctionf2(x)……f2=f3(x)+3EndSubFunctionf3(x)……f3=x*xEndSubSubf1(x)…Callf1(y)EndSub过程的直接调用SubCo

mmand1_Click()……Callf1(y)EndSub过程的递归调用五、递归:1611.递归的概念用自身的结构来描述自身就称为“递归”。例对阶乘的定义:)!2()1()!1()!1(!nnnnnn

2.递归过程过程在自身定义的内部调用自己。例编fac(n)=n!的递归函数Functionfac(nAsInteger)AsIntegerIfn=1Thenfac=1Elsefac=n*fac(n-1)EndIfEndFunction1)1fac(

*11)fac(nnnnnSubCommand1_Click()Print―fac(4)=‖;fac(4)EndSub结果:fac(4)=24162递推回归在递归处理中,用栈来实现。栈中存放形参、局部变量、返回地址。递推过程:每调用自身,当前

参数压栈,直到达到递归结束条件。回归过程:不断从栈中弹出当前的参数,直到栈空。注意:1、递归算法设计简单,但消耗的机时和占据的内存空间比非递归大。2、构成递归的要素:具备递归条件;具备递归结束条件及结束时的值;能用递归形式表示,并且递归向终止条件发展。fac(2)

=2*fac(1)fac(1)=1fac(4)=4*6fac(3)=3*2fac(2)=2*1fac(3)=3*fac(2)fac(4)=4*fac(3)163例利用递归求最大公约数0Mod)Mod,gcd(0Mod),gcd(nmnmnnmnnmPublicFunct

iongcd(mAsInteger,nAsInteger)AsIntegerIf(mModn)=0Thengcd=nElsegcd=gcd(n,mModn)EndIfEndFunctionPrivateSubForm_Click()Printgcd(10,4)EndSub164分析以下子过

程的功能,当n=100,r=8,结果是多少?PublicSubf(ByValn%,ByValr%)Ifn>rThenCallf(n\r,r)PrintnModr;EndSubPrivateSubCommand1_Click()Callf(100,8)EndSub显示结

果144165例:打印分形图从一个大的等边三角形开始,将其三条边的中点进行连线,分成相同的4个三角形,除中间外的3个三角形再重复上述过程,直到满足给定条件的底层为止。实现该方法采用递归子过程程序最简洁。1

66PrivateSubPicture1_Click()DimnAsIntegern=InputBox("输入n的值")Picture1.PrintTab(5);"递归n="&n&"时的图形"Picture1.Scale(0,600)-(600,0)Calltriangle

(30,320,570,30,570,n)EndSubPrivateSubtriangle(x1!,x2!,x3!,y1!,y2!,k%)Dimu1!,v1!,u2!,v2!If(k>1)Thenu1=(x1+x2)/2u2=(x2+x3)/2v1=(y1+y2)/2Ca

lltriangle(u1,x2,u2,v1,y2,k-1)Calltriangle(x1,u1,x2,y1,v1,k-1)Calltriangle(x2,u2,x3,y1,v1,k-1)ElsePicture1.Line(

x1,y1)-(x3,y1)Picture1.Line(x1,y1)-(x2,y2)Picture1.Line(x2,y2)-(x3,y1)EndIfEndSub167本节重点和难点1.确定自定义的过程是子过程还是函

数过程函数过程名有值,子过程名无值。过程有一个返回值,则使用函数过程;若返回多个值或无返回值,一般使用子过程。2.过程中形参的个数和传递方式的确定过程中参数的作用是实现过程与调用者的数据通信。(1)从主调程序获得初值,值传递。(2)将结果返回给主调程序

,地址传递。3.实参与形参结合时对应问题个数、类型、位置、次序一一对应。形参是值传递,对应实参可以是表达式、常量、数组元素。形参是地址传递,对应实参只能是简单变量。4、数组、记录类型、对象只能是地址传递。1684.变量的作用域问题局

部变量、静态变量、全局变量特点、作用5.递归调用出现“栈溢出”递归过程中有终止的条件和终止时的值或某种操作;每递归调用一次,其中的参数要向终止方向收敛。169递归常见错误:递归调用出现“栈溢出”在递归调用时,其中的参数要向终止方向收敛。如下求阶乘的递归函

数过程:PublicFunctionfac(nAsInteger)AsIntegerIfn=1Thenfac=1Elsefac=n*fac(n-1)EndIfEndFunctionPrivateSubCommand

1_Click()Print―fac(5)=‖;fac(5)Print―fac(5)=‖;fac(-5)‗栈溢出EndSub1703.8常用算法举例算法是对某个问题求解过程的描述一、若干初等数学问题:1.累加、连乘1~100的5或7的倍数的和Sum=0Fori=1To100If

iMod5=0OriMod7=0ThenSum=Sum+iEndIfNextiPrintSum3~10的乘积t=1Fori=3To10t=t*iNextiPrintt171例求自然对数e的近似值,要求其误差小于0.00001,近似公式为:该例题涉及两个问题:(1)用循环结构求级数和

的问题。本例根据某项值的精度来控制循环的结束与否。(2)累加:e=e+t循环体外对累加和的变量清零e=0连乘:n=n*i循环体外对连乘积变量置1n=1PrivateSubForm_Click()Dimi%,

n&,t!,e!e=0:n=1„e存放累加和、n存放阶乘i=0:t=1„i计数器、t第i项的值DoWhilet>0.00001e=e+t:i=i+1„累加、连乘n=n*i:t=1/nLoopPrint"计算了";

i;"项的和是";eEndSubm1i0ii!11i!1...!1...3!1!211!11ei1722.求素数素数是一个大于2,且不能被1和本身以外的整数整除的整数。判别某数m是否为素数最简单的方法是:对于m从i=2,3,…,m-1判别m能否被i整除

,只要有一个能整除,m不是素数,否则m是素数。例求100以内素数的代码:Form=2To100Fori=2Tom-1If(mModi)=0ThenGoToNotNextMNextiPrintmNotNextM:Nextmm是否为素数求100以内的

素数思考:此例用GoTo语句对非素数不作判断,若不用GoTo语句,如何修改程序?例:用筛选法求素数1733.穷举法“穷举法”也称为“枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。例百元买百鸡问题。假定小

鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为:x+y+z=1003x+2y+0.5z=100三个未知

数,两个方程,此题有若干个解。解决此类问题采用“试凑法”,把每一种情况都考虑到。方法一:最简单三个未知数利用三重循环来实现。方法二:从三个未知数的关系,利用两重循环来实现。1744.递推法“递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转化

为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。例猴子吃桃子。小猴在某天摘桃若干个,当天吃掉一半多一个;第二天吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半多一个,到第

7天要吃时只剩下一个,问小猴共摘下了多少个桃子?分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子……。设第n天的桃子为xn,那么它是前一天的桃子数的xn-1的一半减1,即xn-1=

(xn+1)*21755.最小、最大值在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数替

换为最大值;依次逐一比较。例随机产生10个100~200之间的数,求最大值。PrivateSubCommand1_Click()Max=100Fori=1To10x=Int(Rnd*101+100)Printx;Ifx>MaxThenMax=xNex

tiPrintPrint"最大值=";MaxEndSub1766、数制转换例将一个十进制整数m转换成r(2-16)进制字符串。方法:将m不断除r取余数,直到商为零,以反序得到结果。1777、例加密和解密简单加密的思想是:将每个字母C加一序数K,式子c=chr(Asc(c)+k),例如序

数k为5,这时“A‖―F‖,“a‖―f‖,“B‖―G‖…当加序数后的字母超过“Z‖或“z‖则c=hr(Asc(c)+k-26)。解密为加密的逆过程。178二、排序选择、冒泡、插入法排序、合并排序等。前两种排

序欲排序的数据全部输入后,再进行排序;插入法排序每输入一项,马上插入到数组应在的位置,数组始终有序。例插入排序,实现的步骤:(1)输入欲排序的数据项x;在数组a中找x应所处的位置j;(2)从数组的最后一个元素开始到下标j依次往后移,使j位置空出;(3)将x放入位置

j处,一个数据插入完成;(4)有若干个数重复(1)~(3)。179例合并排序,将两个有序的数组合并成另一个有序的数组。假设有序的数组为A、B,合并后的数组为C。合并排序的思想为:(1)先在A、B数组中各取

第一个元素进行比较,将小(递增次序)的元素放入C数组;(2)取小的元素所在数组的下一个元素与上次比较后较大的元素比较,重复上述过程,直到某个数组被先排完;(3)将另一个数组剩余元素抄入C数组,合并排序完成。18

0三、查找1、顺序查找。顺序查找根据查找的关键值与数组中的元素逐一比较(数组可无序)PublicSubSearch(a()AsVariant,ByValkeyAsVariant,index%)Dimi%Fori=LBound(a

)ToUBound(a)Ifkey=a(i)Then'找到,元素的下标在index中,结束查找index=iExitSubEndIfNextiindex=-1'找不到,index形参的值为-1EndSub平均查找次数n/2181Key<a

(mid)high=mid-1查找区域缩小一半,继续Key=a(mid)找到结束Key>a(mid)low=mid+1查找区域缩小一半,继续直到找到或查找区域中无元素.本例用递归实现Subbirsearch(a(),low%,high%,key,index%)2、二分法查找(折半法

查找)要查找的数组必须有序。思想:要查找的关键值Key同数组的中间mid项元素比较:12345678111222333444555666777888Lowhighmid444Key182四、二分法求根思想:已知求根区间[a,b]有一根,每次把求根区间缩小一半,直到找到解或求根区间

足够小。方法:求[a,b]的中点c,判断f(c)=0,c为求得的根,结束;f(a)与f(c)同号,则[a,c]无根,c代替a;否则[c,b]无根,c代替b;使求根区间缩小一半,重复上述步骤,直到区间小于精度。xbaacf(x)PublicFunctio

nhalfRoot(ByVala!,ByValb!)Dimc!DoWhileAbs(b-a)>0.00001c=(a+b)/2Iff(c)=0ThenExitDoElseIff(a)*f(c)>0Thena=cEls

eb=cEndIfLoophalfRoot=cEndFunction183五、字符串处理例编写一个英文打字训练的程序,要求如下:(1)在标签框内随机产生30个字母的范文;(2)当焦点进入文本框时开始计时,并显示当时时间;(3)在键入文本框按产生的范文输入相应的字母;(4)当键入满了30个字

母后结束计时,禁止向文本框输入内容,与范文逐一比较,显示打字的速度和正确率。1843.9程序调试一.错误类型(1)编辑错误在编辑代码时,VB会对键入的代码直接进行语法检查。当发现代码存在打字错误,遗漏关键字或标点符等语法错误,VB在Form窗口中弹出一个子窗口,

提示出错信息,出错的那一行变成红色。这时,用户必须单击“确定”按钮,关闭出错提示窗,然后对出错行进行修改。185(2)编译错误编译错误指按了“启动”按钮,VB开始运行程序前,先编译执行的程序段时,产生的错误。此类错误由于用户未定义变量、遗漏关键字等原因产生。这时,VisualBasic也弹出一个子

窗口,提示出错信息,出错的那一行被高亮度显示。186(3)运行错误运行时错误指VB在编译通过后,运行代码时发生的错误。这类错误往往是指令代码执行了一非法操作引起的。例如类型不匹配、试图打开一个不存在的文件等。187(4)逻辑错

误程序运行后,得不到所期望的结果,这说明程序存在逻辑错误。这类错误往往是程序存在逻辑上的缺陷所引起。例如,运算符使用不正确、语句的次序不对、循环语句的起始、终值不正确等。通常,逻辑错误不会产生错误提示信息,故错误较难排除,需

要程序员仔细地阅读分析程序以及调试。188二.调试错误(1)VB的三种模式•设计模式[设计]进行程序的界面设计、属性设置、代码编写等。•运行模式[运行]执行“运行/启动”命令,可以查看程序代码,但不能修改。•中断模式[中断]当在运行模式,按了“中断”命令或当程序出现运行时错误时进入中断模式。可以查

看代码、修改代码、检查数据。(2)调试窗口有三个调试窗口,它们是:“立即”窗口、“监视”窗口、和“本地”窗口。可单击视图菜单中的对应命令打开这些窗口。189(3)设置断点和逐语句跟踪断点是告诉VB挂起程

序执行的一个标记,当程序执行到断点处即暂停程序的运行,进入中断模式。设置或删除断点的步骤:中断模式下,直接查看某个变量的值,只要把鼠标指向所关心的变量处,稍停一下,就在鼠标下方显示该变量的值。断点标记当前行第四章常用控件与窗体4.1选择性控件4.2时钟4.3菜单设计4.4对话框4.5多重

窗体4.6高级控件4.7鼠标器、键盘191一、单选钮和复选框1、属性:Caption属性:文本标题。Alignment属性:0:控件钮在左边,标题显示在右边。1:控件钮在右边,标题显示在左边。Value

属性:单选钮(逻辑型)检查框(数值型)True:选定0--Unchecked:未被选定(默认)False:未选定(默认)1--Checked:选定2--Grayed:灰色,禁止选择Style属性:0--Standard:标准方式1--Grap

hical:图形方式4.1选择性控件复选框(CheckBox)单选钮(OptionButton)列表框(ListBox)组合框(ComboBox)1922、事件:Click单选和复选按钮都能接收Click事件,当单击时它们会自动改变状态。例用单选钮和复选框设置文本框的字体。

193二、框架(Frame):框架内控件的创建方法:方法1:单击工具箱上的工具,然后用出现的“+”指针,在框架中适当位置拖拉出适当大小的控件。不能使用双击工具箱上图标的自动方式。方法2:将控件“剪切”到剪贴板,然后粘贴(Ctrl+V)到框架。框架

设Caption为"字体"194Caption属性:框架标题Enabled属性False:标题呈灰色,不允许对框架内的对象进行操作。Visible属性True:框架及其控件可见。False:框架及其控件被隐含起来。事件:Click、DblCl

ick一般不需要编写框架的事件过程。例框架用法示例195三、列表框(ListBox):显示项目列表,用户可从中选择一个或多个项目。如果有较多的选择项,超出所画的区域而不能一次全部显示时,VB会自动加上滚动条。通

常在一个列表框中只能选择一项,但当列表框的MultiSelect属性为1或2时允许多项选择。列表框最主要的特点是只能从其中选择,而不能直接修改其中的内容。List1列表框各主要属性的值:List1.ListIndex=3(下标从0开始的)List1.ListCount=5List1.S

elected(3)=True,其余为False。List1.Sorted=False,没有排序。List1.Text为“cox‖,与List1.List(List1.ListIndex)相等1961、属性:(1)基本属性:Name、Enabled、Visibl

e、Index等(2)List属性:字符型数组,存放列表框的项目,下标是从0开始的。(3)ListIndex:表示执行时选中的列表项序号,如果未选定任何项时为-1。(4)ListCount:表示列表框中项目的数量,ListCount-1表示最后一项的序号。(5)Selected:

是一个逻辑数组,其元素对应列表框中相应的项,表示对应的项在程序运行期间是否被选中。Selected(i)的值为True表示第i+1项被选中。(6)Sorted:决定列表框中项目在运行期间是否按字母顺序排列显示。如为True:按字

母顺序排列;如为False:按加入先后顺序排列。(7)Text:表示列表项中被选定的文本内容。是默认的属性。注意:List1.List(List1.ListIndex)=List1.Text。(8)Mu

ltiSelect:0-None:禁止多项选择(默认)。1-Simple:简单多项选择。鼠标单击或按空格键表示选定或取消选定一个选择项。2-Extended:扩展多项选择。按住Ctrl键同时用鼠标单击或按空格键表示选定或取消选定一个选择项;按住Shift键同时单击,或按住Shift并且

移动光标键,就可以从前一个选定的项扩展选择到当前选择项,即选定多个连续项。其中:List既可在设计状态设置,也可在程序中设置或引用。Sorted、MultiSelect只能在设计状态设置。ListIndex、ListCount、Selected、Text只能在程序中设置或

引用。1972、方法列表框中的选择项可以简单地在设计状态通过List属性设置,也可通过相应方法来实现。(1)AddItem:添加一个项目形式:对象.AddItemitem[,index]其中:对象:可以是列表框或组合框item:

必须是字符串表达式,是要加入的项目index:决定新增项目在列表框或组合框中的位置,如果省略,则添加在最后。对于第一个项目,index为0。(2)RemoveItem:删除一个项目形式:对象.RemoveItemindex其中:对象、index同上(3)Clear:清除所有项目形式:对象

.Clear其中:对象可以是列表框、组合框或剪贴板。1983、事件:Click、DblClick一般不需要编写Click事件过程通常在单击命令按钮或发生DblClick事件时才读取Text属性例1对列表框进行项目添加、修

改和删除操作。例2对列表框进行项目添加操作,并去掉重复值。199下拉式组合框简单组合框下拉式列表框Combo1组合框各主要属性的值:Combo1.ListIndex=0Combo1.ListCount=8Combo1.Sorted=FalseCombo1.Text为“李宁”四、组合框(Co

mboBox):组合框是组合了文本框和列表框的特性而形成的一种控件。组合框在列表框中列出可供用户选择的选项,另外还有一个正文框。当用户选定某项后,该项内容自动装入文本框中。当列表框中没有所需选项时,除了下拉式列表

框(Style为2)之外都允许在文本框中用键盘输入,但输入的内容不能自动添加到列表框中。组合框占用屏幕空间比列表框要小。组合框有三种不同的风格,由Style属性值决定。200例对组合框进行项目添加、修改和删除操作。1、属性:组

合框拥有列表框和文本框的大部分属性。组合框也有SelLength、SelStart、SelText这三个文本框才有的属性。组合框特有的属性:Style(列表框特有的属性:MultiSelect、Selected)类型Sty

le输入下拉式组合框0(默认)能简单组合框1能下拉式列表框2不能2、方法:同列表框3、事件:Click,只有简单组合框才有DblClick事件2016.2滚动条1、重要属性Max:最大值-32,768~32,767Min:最小值-32,768~32,767SmallCh

ange最小变动值,单击箭头时移动的增量值。LargeChange最大变动值,单击空白处时移动的增量值。Value滑块所处位置所代表的值。水平滚动条垂直滚动条SmallChangeMinValueMaxSmallChangeLargeChangeL

argeChangeSlider控件Slider须通过:“工程/部件”,选择:MicrosoftWindowscommonControl6.0部件2022、事件:Scroll:拖动滑块时会触发Scroll事件。Change:Value属性改变时触发Change事件。例1用一个

文本框(txtSpeed)显示滚动条(hsbSpeed)滑块当前位置所代表的值。例2调色板程序。SubhsbSpeed_Change()Text1.Text=HScroll1.ValueEndSub203时钟控件能有规律地以一定的时间间隔激发

计时器事件,周期性地自动执行相应的程序代码。它必须依附在窗体上,在程序运行时,它是不可见的。以Interval为时间间隔产生Timer事件。属性:Interval属性单位:ms(0.001s),介于0~64767之间,所以最大

时间间隔大约1min。如:0.5秒是500ms。Interval=0:屏蔽计时器。Enabled属性:True:有效计时False:停止时钟工作事件:只有Timer事件例1定时的闹钟:在文本框中设置定时时间,单击“定时”按钮开始定时。例2动态

显示图片。4.2时钟控件(Timer)2044.3菜单设计一、菜单编辑器的使用工具/菜单编辑器(CTRL+E)窗体上快捷菜单/菜单编辑器常用属性:1.标题(Caption)热键:前面加&2.名称(Name)文本框分隔符也应有名称。3.快捷键(Shortcut)菜单名没有快捷键4.复选(

Checked)检查框TRUE有5.有效(Enabled)检查框6.可见(Visible)检查框菜单列表框菜单项属性操作按钮每一个菜单项都是一个控件对象,只有Click事件。标题属性用于设置应用程序菜单上出现的字符,

名称属性用于定义菜单项的控件名,这个属性不会出现在屏幕上,在程序中用来引用该菜单。205例建立一个有菜单功能的文本编辑器。假定所要建立的菜单结构如下所示。建立菜单大致可分成以下三个步骤:1、建立控件。2、设计菜单3、为事件过程编写代码。标题名称快捷键标题名称快捷键文件FileMenu….

新建FileNewCtrl+N….打开FileOpenCtrl+O….-Bar1….保存FileSaveCtrl+S….另存为FileSaveAs….-Bar2….退出FileExit编辑EditMenu….复制EditCopyCtrl+C….剪切EditCutCtrl+

X….粘贴EditPasteCtrl+V206二、菜单项增减在程序运行时,菜单随时增减,如“文件”菜单能保留最近打开的文件数。这同控件数组一样,使用菜单数组。步骤:1.在菜单设计时,加入一个菜单项,其Index为0(菜单数组),Visible为False。2.在程序运行时,通

过Load方法向菜单数组增加新的菜单项。同样,要删除所建立的菜单项,使用UnLoad方法向菜单数组减少菜单项。207例在文件菜单中保留最近打开的文件清单。在上例的基础上,在文件菜单的“退出”选项前面(或后面)插入一个菜单项RunMenu,设置索引属性为0,使RunMenu成

为菜单数组,Visible属性设置为False,再插入一个名为Bar3的分隔线,Visible也设置为False。在菜单的最后加入名称为MenuDel,标题为“删除菜单项”的菜单。假定要保留的文件清单限定为4个文件名,设定一个全局变

量iMenucount记录文件打开的数量,当其小于5时,每打开一个文件,就用Load方法向RunMenu()数组加入动态菜单成员,并设置菜单项标题为所打开的文件名,对于第5个以后打开的文件不再需要加入数组元素,采用先进先出的

算法刷新记录最先使用的动态菜单成员的标题。208三、弹出菜单(快捷菜单)弹出菜单是独立于窗体菜单栏而显示在窗体内的浮动菜单。显示位置取决于单击鼠标键时指针的位置。设计与普通菜单相同(如果不希望菜单出现在窗口的顶部,该菜单

名Visible属性设置为False)。菜单弹出的方法:[对象.]PopupMenu菜单名[,标志,x,y]标志,表示弹出的位置和触发的键SubText1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButt

on=2ThenPopupMenuEditMenu,vbPopupMenuCenterAlignEndSub例弹出菜单。在上例中加入有关“编辑”这部分菜单的弹出菜单功能,用鼠标右键单击Text1时能弹出EditMenu菜单中的菜单项,并以鼠标指针坐标X为弹出菜单的中心,可使用如

下代码:2094.4对话框VB中有三种对话框:1、预定义的对话框:系统定义的。用InputBox、MsgBox调用。2、通用对话框:标准对话框。有六种(打开、另存为、颜色、字体、打印和帮助)调用方法:“工程”-“部件”-MicrosoftCommonDialogCon

trol6.03、用户自定义对话框:用户自定义的含有控件的窗体。210一、通用对话框(CommonDialog)主要共同属性:Action:打开通用对话框。DialogTiltle:通用对话框标题。Canc

elError:True:选择“取消”按钮,出现错误警告,自动将错误对象Err.Number置为32755(cdlCancel)以便供程序判断。False(缺省):选择“取消”按钮,没有错误警告。通用对话框的类型Action

方法打开(Open)1ShowOpen另存为(SaveAs)2ShowSave颜色(Color)3ShowColor字体(Font)4ShowFont打印机(Printer)5ShowPrinter帮助(Help)6ShowHelp打开通用对话

框:在设计状态,CommonDialog控件以图标的形式显示在窗体上,其大小不能改变,在运行时,控件本身被隐藏。要在程序中显示通用对话框,必须对控件的Action属性赋值,或者使用说明性的Show方法。2111.“文件”对话框(打开、保存)需设置的属性:Filte

rFileNameInitDirFilterIndex=1212属性FileName:设置和得到用户所选的文件名(包含路径)FileTitle:不包含路径Filter:过滤文件类型,使文件列表框中只显示指定类型的文件。其格式为:文件说明|文件类型。例如,Documents(*.DOC)|*.D

OC|TextFiles(*.TXT)|*.txt|AllFiles|*.*FilterIndex:决定在文件类型列表框中显示第几组类型的文件。InitDir:初始化路径。若缺省,表示当前目录。“打开”文件对话框

属性页DialogTiltleFileNameInitDirFilterFilterIndexDefaultExt213例1用命令按钮的Click事件显示文件打开对话框CommonDialog1.InitDir=―C:\Windows‖'设置初始目录CommonDialog1.Filter="文本

文件|*.Txt"'过滤文件类型CommonDialog1.CancelError=True'控制取消按钮CommonDialog1.ShowOpen'打开对话框2.―另存为”对话框没有提供真正的存储文件操作,仍需要编程完成储存操作。属性基本和“打开”对话框相同,另外还有一个

DefaultExt:所存文件的缺省扩展名3.―颜色”对话框属性Color:返回或设置选定的颜色。例2―颜色”对话框的使用。在上例中增加一个命令按钮,用于打开“颜色”对话框,通过“颜色”对话框设置标签前景颜色。

2144.“字体”对话框:在使用之前,必须设置Flags属性值Flags属性:指示所显示的字体类型,必须设置。cdlCFScreenFonts&H1屏幕字体cdlCFPrinterFonts&H2打印机字体cdl

CFBoth&H3打印机字体和屏幕字体。cdlCFEffects&H100显示删除线和下划线检查框以及颜色组合框FontUnderlineFontNameFontBold、FontItalicFontSizeFon

tStrikethruColorMin、Max例3用“字体”对话框设置文本框的字体,要求字体对话框内出现删除线、下划线,并可控制颜色元素。2155.“打印”对话框属性FromPage:起始页号ToPage:终止页号Copi

es:打印份数如果打印驱动程序不支持多份打印,该属性有可能始终返回1。例4打印对话框的使用。可用Printer对象表示默认打印机6.“帮助”对话框帮助文件需要用其它的工具制作,如MicrosoftWindowsHelpCom

piler。属性:HelpCommand:在线Help帮助类型HelpFile:Help文件的路径及其名称HelpKey:在帮助窗口显示由该帮助关键字指定的帮助信息。例5帮助对话框的应用216二、自定义对话框用户所创建的含有控件的窗体。属性值说明BorderStyle1边

框类型为固定的单个边框,防止对话框在运行时改变尺寸ControlBoxFalse取消控制菜单框MaxButtonFalse取消最大化按钮,防止对话框在运行时被最大化MinButtonFalse取消最小化按钮,防止对话框在运行时被最大化对话框

属性设置217显示对话框模式对话框frmAbout.ShowvbModal„vbModal是值为1的常数无模式对话框frmAbout.Show„不带style参数卸载对话框UnloadfrmAbout隐藏对话框frmAbout.Hide21

84.5多重窗体1.添加窗体“工程|添加窗体”新建现存添加“现存”窗体时要注意:防止多个窗体的Name相同而不能添加;添加的窗体实际是将其它工程中已有的窗体加入,多个工程共享窗体;通过“另存为”命令以不同的窗体文件名保存,断开共

享。2192.设置启动窗体设置启动对象3.窗体语句(1)Load语句:装入窗体到内存但没有显示窗体形式:Load窗体名称(2)Unload语句:从内存删除窗体形式:Unload窗体名称UnloadMe关闭窗体自

己―工程/属性”“启动对象”2204.窗体方法(1)Show方法:显示一个窗体,它兼有加载和显示窗体两种功能。[窗体名称].Show[模式]1-Modal(模式型):用户无法将鼠标移到其他窗口,只有在关闭该窗体后才能对其它窗体进行操作。0-Modeless(非模式型):可以对其它窗体进

行操作。“模式”的默认值为0。当窗体成为活动窗口时发生窗体的Activate事件。(2)Hide方法:隐藏窗体,但并没有从内存中删除。[窗体名称.]Hide2215.不同窗体间数据的存取(1)存取控件的属性另一窗体名.控件名.属性(2)存取变量的

值另一窗体名.全局变量名为了方便起见,要在多个窗体中存取的变量一般应放在标准模块(.BAS)内声明。222例输入学生五门课程的成绩,计算总分及平均分并显示。模块:PublicMATHAsSinglePublicP

HYSICSAsSinglePublicCHEMISTRYAsSinglePublicCHINESEAsSinglePublicENGLISHAsSingle2236.启动时的快速显示使用快速显示窗体模板的方法:“工程”——”添加窗

体”——”新建”——”展示屏幕”——”打开”2244.6高级控件“工程”——”部件”ActiveX控件可插入对象ActiveX设计器ActiveX控件存放在Windows的SYSTEM目录中,具有OCX扩

展名225SSTab控件——页框(具有多个选项卡)在MicrosoftTabbedDialogControl6.0部件中ProgressBar控件——进度条在MicrosoftWindowsCommonControl6.0部件中Slider控件

——包含滑块和可选择性刻度标记的窗口属性:tickfrequency—决定控件上刻度的疏密。事件:scroll和change事件226UpDown控件位于MicrosoftWindowsCommonControl-26.0部件中将UpDow

n控件与其他控件关联的步骤是:(1)打开UpDown控件的属性页(2)在合作者选项中输入合作者控件的名称和选定合作者控件的属性属性:increment--控件的实际增减值事件:downclick和upclick事件227Animation控件——显示无声的AVI

视频位于MicrosoftWindowsCommonControl-26.0部件中方法:openplaystopclose属性:centerautoplay2284.7鼠标器和键盘一、鼠标器:1.鼠标器事

件:除了Click、DblClick外,还有三个:SubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)SubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsS

ingle,YAsSingle)SubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)注意:鼠标事件发生在什么对象上,是窗体上还是控件上。当鼠标指针位于窗体中没有控件的区域时,窗

体将识别鼠标事件。当鼠标指针位于某个控件上方时,该控件将识别鼠标事件。229(1)Button参数:指示按下或释放了哪个鼠标按钮。B2B1B0B0为1:按下了左键B1为1:按下了右键B2为1:按下了中键IfButton=1T

hen'或者IfButton=vbLeftButtonThen…'这是按了左健后执行的代码…Endif使用符号常数:1—vbLeftButton:用户按下左键触发了鼠标事件;2—vbRightButton:用户按下右键触发了鼠标事件;4—vbMiddle

Button:用户按下中键触发了鼠标事件。中右左230(2)Shift参数:包含了Shift、Ctrl、Alt键的状态信息。B0为1:按下了Shift键B1为1:按下了Ctrl键B2为1:按下了Alt键例如:如果同时按了Ctrl和Shift键,则B0和B1为1,B2为0,

Shift参数为3(011B)注意:可能同时按下两个或三个键。如果Shift<>1成立,并不表示没有按下Shift,因为可能其它键也被按下了。如果要测试按下了某个键,则需要与Shift参数进行and运算。例如Shiftand1成立,表示肯定按下了Shift(可能其它键也被按下了)。IfS

hift=2andButton=1Then…‗这是仅按住Ctrl键单击鼠标后执行的代码…EndIfB2B1B0AltCtrlShift231符号常数:1—vbShiftMask2—vbCtrlMask4—vbAltMask(3)x,y:鼠标的当前位置,采用的坐标系是用ScaleMode属性

指定的坐标系例显示鼠标器指针所指的位置例简单的画图程序。在窗体上按下鼠标右键画圆,按下鼠标左键移动时画线。232二、键盘事件:注意窗体和控件的键盘事件是有区别的。KeyPress事件过程:按下并释放一个会产生ASCII码的键时被触发SubForm_KeyPress(Key

AsciiAsInteger)‘窗体的事件过程Subobject_KeyPress([indexAsInteger,]KeyAsciiAsInteger)„控件的事件过程KeyDown事件过程:按下键盘上任

意一个键时被触发SubForm_KeyDown(keycodeAsInteger,shiftAsInteger)Subobject_KeyDown([indexAsInteger,]keycodeAsInteger,shiftAsInteger)KeyUp事件过程:

释放键盘上任意一个键时被触发SubForm_KeyUp(keycodeAsInteger,shiftAsInteger)Subobject_KeyUp([indexAsInteger,]keycodeAsI

nteger,shiftAsInteger)2331、KeyPress事件:KeyPress事件只对会产生ASCII码的按键有反应,包括数字、大小写字母、空格、Enter、Tab、BackSpace、Esc及标点符号等键。对于例如方向键、功能键(如F1,Alt,Shift,Ctrl)等的不会产生

ASCII码的按键,KeyPress不会发生。2、KeyDown和KeyUp事件:当控制焦点在某个对象上,同时用户按下键盘上的任意一个键,都会引发该对象的KeyDown事件,释放按键便触发KeyUp事件。KeyCode参数值是用户所操作的那个键的扫描代码,它告诉事件过程用户

所操作的物理键。例如,不管键盘处于小写还是大写状态,用户在键盘按“A‖键,KeyCode参数值相同。对于有上档字符和下档字符的键,其KeyCode也是相同的,为下档字符的ASCII码。键(字符)KeyCodeKeyAsc

ii“A”&H41&H41“a”&H41&H61“5”&H35&H35“%”&H35&H25“1”(大键盘上)&H31&H31“1”(数字键盘上)&H61&H31234注意窗体和控件的键盘事件发生的顺序:默认情况下,当用户对当前具有控制焦点的控件进行键盘操作时,控件的三个

键盘事件被触发,但窗体的三个键盘事件不会发生。为了启用这三个事件,必须将窗体的KeyPreview属性设为True,而默认值为False。如果窗体的KeyPreview属性设置为True,则首先触发窗体的KeyPress、KeyUp、KeyDown事件,然后才触发控件

的键盘事件。也就是说,如果窗体的KeyPreview属性设为True,并且窗体级事件过程修改了KeyAscii变量的值,则当前具有焦点的控件的KeyPress事件过程将接收到修改后的值,如果窗体级事件过程将KeyA

scii设置为0,则不再调用对象的KeyPress事件过程。235窗体的:KeyPressKeyDownKeyUp控件的:KeyPressKeyDownKeyUp窗体的KeyPreview为True焦点在控件上输入SubForm_KeyPress(Ke

yAsciiAsInteger)KeyAscii=KeyAscii+1EndSubSubText1_KeyPress(KeyAsciiAsInteger)KeyAscii=KeyAscii+1EndSub假定窗体KeyPreview为True,并有下面事件过程,则当文本框中输入“1‖时,实际上是

得到的是“3‖?窗体KeyPreview为False时在文本框中输入“1‖时,实际上得到的是什么。在这里作一点修改影响所有控件在这里作一点修改影响一个控件236利用这个特性可以对输入的数据进行验证、限制和修改1.修改输入数据:将K

eyPreview设置为True时,在窗体的如下KeyPress事件过程中将所有的字符都改成大写,则窗体上的所有控件接收到的都是大写字符。SubForm_KeyPress(KeyAsciiAsInteg

er)IfKeyAscii>=Asc("a")AndKeyAscii<=Asc("z")ThenKeyAscii=KeyAscii+Asc("A")-Asc("a")EndIfEndSub2.限制数据输入:文本框只能接收“0”~“9”的数字字符。SubText1_KeyPress(KeyAsc

iiAsInteger)IfKeyAscii<48OrKeyAscii>57ThenKeyAscii=0EndIfEndSub237例编写一个程序,当按下Alt+F5时终止程序的运行。(F5的KeyCode码为vbKeyF5)„先把窗体的KeyPreview设置为T

rue,再编写如下的程序:SubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)'按下Alt键时,Shift的值为4If(KeyCode=vbKeyF5)And(Shift=4)Th

enEndEndIfEndSub238三、拖放:即将源对象“拖”到目标对象上“放”的操作。有两种模式:自动拖放手工拖放2391.DragMode属性1:自动拖动模式,源对象不再接收Click和MouseDown事件。0:(缺省),手工拖动模式,源对象接收Click和MouseDown事件2.Dr

agIcon属性拖动过程中显示的图标(Ico或Cur文件)。lblExample1.DragIcon=LoadPicture("C:\Icons\Mail.ico")lblExample2.DragIcon=picIcon.Picture‟用控件picIcon中的图形作为标签l

blExample2被拖动时显示的图标3.Drag方法当DragMode为0时,需用Drag方法启动拖放[控件名称.]Drag参数0:取消拖放操作1(省略):开始拖放操作2:结束拖放操作2404、拖放事件:DragDrop、DragOver在这

两种事件引发的同时,系统自动将源对象作为Source参数传递给事件过程,可通过程序设计对源对象进行一些操作和判断,同时鼠标指针的位置及拖放过程的状态也将作为参数传递给事件过程,供程序识别和使用。在拖放事件过程中可以采用TypeOf函数判断源对象的控件类型,供程序识别。通过判断源对象的控件类型,可

对其进行属性设置和调用相应的方法进行操作。其形式如下:IfTypeOf对象变量Is控件类型then其中TypeOf函数的返回值为对象变量所引用控件的类型例:IfTypeOftext1istextboxthenmsgbo

x(“text”)endif2415.Parent属性所有控件均具有该属性。当控件作为数据传递给过程时,控件所在窗体也被传递到过程中,窗体的属性及方法可通过source.parent继承下来。如:source.parent.

属性=设置值source.parent.方法参数242例拖放应用示例:将装有某个图形的图形框作为源对象拖放到窗体的某个地方,如果被拖到“取消拖放”标签上方,则取消拖放操作。例拖放应用示例:左边图像框采用手工拖动模式,标签采用自动拖动模式。图像框只能用

鼠标左键拖动,拖到右边的图像框后消失,而且拖动时图像框中的图标作为拖动图标使用。标签可以拖动,但拖到图像框后显示“Error”。2434.7.4OLE拖放将数据从一个控件或应用程序中移动到另一个控件或应用

程序中OLEDragMode属性0——manual手动实现“拖”操作1——automatic自动实现“拖”操作OLEDropMode属性0——none不接受“放”操作1——manual手动实现“放”操作2——automatic自动实现“放”操作244例:將文本框的OLEDrag

Mode属性设为1,OLEDropMode属性设为2,把文本框中的内容拖动到word等应用程序中第五章文件5.1文件系统控件5.2文件的读写2465.1文件系统控件SubDrive1_Change()Dir1.Path=Drive1.DriveEndSubSubDir1_C

hange()File1.Path=Dir1.PathEndSubPrivateSubForm_Load()Combo1.AddItem"*.txt"Combo1.AddItem"*.dat"Combo1.

AddItem"*.jpg;*.wmf;*.gif"Combo1.AddItem"*.*"Combo1.Text="*.txt"File1.Pattern="*.txt"EndSubPrivateSubCombo1_

Click()File1.Pattern=Combo1.TextEndSubSubPrivateSubFile1_Click()MsgBoxFile1.FileNameEndSubPrivateSubFile1_

DblClick()ChDirDir1.Pathx=Shell(File1.FileName,1)EndSub文件系统控件有三种,即驱动器、目录和文件列表框2471.驱动器列表框Drive属性:[对象.]Drive[=drive]Change事件:重新设置Drive属性引发Change事件

2.目录列表框Path属性:[对象.]Path[=pathname]Change事件:重新设置Path属性引发Change事件2483.文件列表框Path属性:显示该路径下的文件。重新设置Path属性引发PathChange事件。Pattern属性:显示的

文件类型。[对象.]Pattern[=value]重新设置Pattern属性引发PatternChange事件。例如:File1.Pattern="*.frm",显示*.frm文件。多个文件类型用分号;分界。例如:"*.f

rm;*.frx"FileName属性:[对象.]FileName[=pathname]引用时只返回文件名,相当于File1.List(File1.ListIndex),需用Path属性得到其路径;设置

时可带路径。249Click、DblClick事件:例如,单击输出文件名。SubFile1_Click()MsgBoxFile1.FileNameEndSub例如,双击执行可执行程序SubFile1_DblClick()ChDirDir1.Path‟改变当前目录RetVal

=Shell(File1.FileName,1)‟执行程序EndSub250文件:存储在外部介质上数据的集合。按名存取。1.记录由若干个相互关联的数据项组成。例如,由学生的学习成绩信息组成的记录:学号姓名数学成绩语文成绩物理成绩总分数据项2.文件及其种类文件:是记录的集合顺序访问

模式:顺序文件。随机访问模式:随机文件,记录的长度相同二进制访问模式:二进制文件(可认为记录长度为1)5.2文件的读写251(1)顺序文件按顺序依次把记录写入文件;按顺序依次把记录读出来。文本文件:一行一条记录

,记录可长可短,以“换行”字符为分隔符号。(2)随机文件随机文件可以直接访问文件中的任意一个记录。每个记录的长度是固定的,每个记录都有一个记录号,按记录号进行存取。通常用来处理数据文件。根据记录号访问

#1记录1#2记录2„„#N记录N(3)二进制文件直接把二进制码存放在文件中。2521.打开文件Open文件名[For模式]As[#]文件号[Len=记录长度](1)文件名:字符串常量,包括存储文件的驱动器名及路径(2)模式OUTPUT:写操作(从

内存写入文件)INPUT:读操作(从文件读出到内存)APPEND:追加信息到文件未尾(3)文件号1~511,可以用FreeFile函数获得下一个可利用的文件号。(4)记录长度小于或等于32767的整数,它指定数据缓冲区的大小。例如,打开C:\

VB\SCORE,供写入数据,指定文件号为#1。OPEN"C:\VB\SCORE"FOROUTPUTAS#15.2.2顺序访问模式打开文件读出或写入关闭文件2532.写入命令:有Write#或Print#命令(1)Print#文件号,[输出列表]“输出列表”:是指[Spc(n

)|Tab[(n)]][表达式列表][;|,](同Print方法的含义)例:保存文本框假定文本框的名称为Text1,文件名为TEST.DAT。方法1:把整个文本框的内容一次性地写入文件。Open"TEST.DAT

"ForOutputAs#1Print#1,Text1.textClose#1方法2:把整个文本框的内容一个字符一个字符地写入文件。Open"TEST.DAT"ForOutputAs#1Fori=1Tolen(Text1.text)Print#1

,Mid(Text1,i,1);NextiClose#1254(2)Write#文件号,[输出列表]“输出列表”:一般是指用“,”分隔的数值或字符串表达式。Write#的功能基本上与Print#语句相同,区别在于Write#是以

紧凑格式存放,即在数据项之间插入“,”,并给字符串加上双引号。例如,命令:Write#1,"One","Two",123内容:“One”,“Two”,123(包括标点符号)3.关闭文件Close[[#]文件号][,[#]文件号]...例如,Close#1,#2,#3如果省略了文件号,Clo

se命令将会关闭所有已经打开的文件。2554.读顺序文件(1)INPUT#文件号,变量列表-------按数据项读从文件中读出数据,把读出的每个数据项分别存放到所对应的变量。为了能够用Input#将文件中的数据正确地读出,在将数据写入文件时,要使用Write#语句而不是用Print#语句。(2

)LINEINPUT#文件号,字符串变量-------按行读读一行到变量中,主要用来读取文本文件。读出的数据中不包含回车符及换行符。(3)INPUT$(读取字符数,#文件号)--------一次性读入该函数可以读取指定数目的字符。2565.函数L

OF(文件号):返回文件的长度(总字节数)。如LOF(1)返回#1文件的长度,如果返回0值,则表示该文件是一个空文件。EOF(文件号):返回读写位置。指针在文件尾时,EOF函数为True,否则为False。对于顺序文件用EOF函数测试是否到文件尾;对于随机文件和二进制文件,当最近一个

执行的Get语句无法读到一个完整记录时返回True,否则返回False。257例:读文本文件到文本框假定文本框名称为Text1,文件名为MYFILE.TXT。方法1:一行一行读Text1.Text=""Open"MYFILE.TXT"ForInputAs#1DoW

hileNotEOF(1)LineInput#1,InputDataText1.Text=Text1.Text+InputData+vbCrLfLoopClose#1258方法2:一次性读Text1.Text=""Open"MYFILE.TXT"ForInputAs#1Text1.Te

xt=Input$(LOF(1),1)Close#1方法3:一个个字符读DimInputDataasString*1Text1.Text=""Open"MYFILE.TXT"ForInputAs#1DoWhileNotEOF(1)InputData=In

put$(1,#1)Text1.Text=Text1.Text+InputDataLoopClose#1259例文件加密程序PrivateSubFile1_DblClick()OpentfilenameFor

InputAs#1Text1.Text=""DoWhileNotEOF(1)indata=Input(1,#1)Text1.Text=Text1.Text+indataLoopEndSubCommonDialog1.Action=2Op

enCommonDialog1.FileNameForOutputAs#1Fori=1ToLen(Text1.Text)Print#1,Mid(Text1.Text,i,1);NextiClose#12605.4随机文件1、打开Open文件名ForRando

mAs#文件号[Len=记录长度]文件以随机访问模式打开后,可以同时进行写入与读出操作。记录长度缺省值是128个字节。2、写操作Put[#]文件号,[记录号],变量名将一个记录变量的内容写到指定的记录位置处。忽略记录号,则表示在当前记录后的位置插入一条记录。3、读操作Get[#]文件

号,[记录号],变量名将记录号指定的记录内容读入记录变量中忽略记录号,则读出当前记录后的那一条记录。4、关闭文件Close261例学生信息管理程序。追加记录(Command1):将一个学生的信息作为一条记录添加到随机文件末尾。显示

记录(cmdDisplay):显示文本框(text4)中指定的记录。2625.5常用的文件操作语句和函数1.FileCopy语句格式:FileCopysource,destination功能:复制一个文件。说明:FileCopy语句不能复制一个已打开的文件。2.K

ill语句格式:Killpathname功能:删除文件。说明:pathname中可以使用统配符“*”和“?”。例如:Kill"*.TXT"3.Name语句格式:NameoldpathnameAsnewpathname功能:重新命名一个文件或目录。说明:(1)

Name具有移动文件的功能。(2)不能使用统配符“*”和“?”,不能对一个已打开的文件上使用Name语句。2634.ChDrive语句格式:ChDrivedrive功能:改变当前驱动器。说明:如果drive为“”,则

当前驱动器将不会改变;如果drive中有多个字符,则ChDrive只会使用首字母。5.MkDir语句格式:MkDirpath功能:创建一个新的目录。6.ChDir语句格式:ChDirpath功能:改变当前目录。例如:ChDir"D:\TMP"7.RmDir语句格式:R

mDirpath功能:删除一个存在的目录。说明:只能删除空目录。2648.CurDir函数格式:CurDir[(drive)]功能:利用CurDir函数可以确定任何一个驱动器的当前目录。说明:drive为“”,则CurD

ir返回当前驱动器的当前目录。例利用ChDrive和ChDir语句改写File1_DblClick()事件过程。SubFile1_DblClick()ChDriveDrive1.Drive'设置缺省驱动器ChDirFile1.Path'设置缺省目录RetVal=Shell(File

1.FileName,1)EndSub265例添加事件过程File1_MouseDown(),使之支持Del键,即按下Del键删除选定的文件。SubFile1_KeyDown(KeyCodeAsInteger,ShiftAsInteg

er)IfKeyCode=vbKeyDeleteThenChDriveDrive1.DriveChDirFile1.PathKillFile1.FileNameFile1.Refresh'文件删除后更新文件列表框EndIfEndSub

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?