【文档说明】(完整PPT)VB教程完整版课件.ppt,共(544)页,6.358 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-2794.html
以下为本文档部分文字说明:
VisualBasic程序设计(6.0版)兰州理工大学计算机与通信学院2第一章VisualBasic程序设计概述1.1概述1.2运行环境、安装和启动1.3VB集成开发环境2022年11月12日星期六兰州理工大学计算机与通
信学院31.1概述一、VB简介:VisualBasic是基于Basic的可视化的程序设计语言。VisualBasic6.0中文版是Microsoft公司最新推出的可视化开发工具,是一种基于Windows操作系统的新型的现代程序设计语言,是一种易于学习、功能强、效率高
的编程工具。任何具有初步程序设计基础的人,都能在很短的时间内掌握好VB,并有效地编写出各种Windows程序。VB6.0包括三个版本:学习版、专业版、企业版2022年11月12日星期六兰州理工大学计算机与通信学院4二、VB主要功能特点:1.具有面向对象的可视化设计工
具2.事件驱动的编程机制3.提供了易学易用的应用程序集成开发环境4.结构化的程序设计语言5.支持多种数据库系统的访问6.OLE技术。VB核心就是其对对象的链接与嵌入(OLE)的支持。7.Active技术8.完备的help联机帮助功能三、VB6.0新功能特点2022年
11月12日星期六兰州理工大学计算机与通信学院51.2运行环境、安装和启动一、运行环境:二、安装:安装文件:setup.exe三、启动:方法:1、双击桌面VB快捷方式。2、“开始”|程序|MicrosoftVisualStudio6.0|Microsoft
VisualBasic6.03、“开始”|运行|C:\programfiles\MicrosoftVisualStudio\VB98\VB6.exe2022年11月12日星期六兰州理工大学计算机与通信学院6进入VB6.0窗口2022年11月12日星期六兰州理工大学计算机与
通信学院71.3VB集成开发环境工具箱工程窗口属性窗口窗体布局立即窗口窗体窗口2022年11月12日星期六兰州理工大学计算机与通信学院81.主窗口应用程序窗口,由标题栏、菜单栏和工具栏组成VB的三种工作模式(标题栏总显示当前模式)(1)设计模式:创建应用程序的大多数工作都是在设计时完
成的。在设计时,可以设计窗体、绘制控件、编写代码并使用“属性”窗口来设置或查看属性设置值。(2)运行模式:代码正在运行的时期,用户可与应用程序交流。可查看代码,但不能改动它。(3)中断模式:程序在运行的中途被停止执行时。在中断模式下,用户可查看各变量及不是属性的当前值,从而了解程序执行是否正常。还
可以修改程序代码,检查、调试、重置、单步执行或继续执行程序。2022年11月12日星期六兰州理工大学计算机与通信学院92.窗体(Form)设计窗口窗体设计窗口是屏幕中央的主窗口,它可以作为自定义窗口用来设计应用程序的界面。用户可以在窗体中添加控件、图形和图片来创
建所希望的外观。每个窗口必须有一个的窗体名字,建立窗体时缺省名为Form1,Form2,...。窗体网格点间距的设置:设计模式-”工具”–”选项”应注意窗体名(代码中使用的标识对象名称)和窗体文件名的区别2022年11月12日星期六兰州理工大学计算机与通信学院10窗体
名窗体文件名2022年11月12日星期六兰州理工大学计算机与通信学院113.代码(code)窗口在设计模式中,通过双击窗体或窗体上任何对象或通过“工程资源管理器”窗口中的“查看代码”按钮来打开代码编辑器窗口。代码编
辑器是输入应用程序代码的编辑器。代码窗口主要包括:a.对象列表框b.过程列表框c.代码框d.过程查看按钮e.全模块查看按钮2022年11月12日星期六兰州理工大学计算机与通信学院122022年11月12日星期六兰州理工大
学计算机与通信学院134.属性(properties)窗口属性是指对象的特征,如大小、标题或颜色等数据。在VisualBasic6.0设计模式中,属性窗口列出了当前选定窗体或控件的属性的值,用户可以对这些属性值进行设置。2022年11月12日星期六兰州理工大学计算机与
通信学院14工程是指用于创建一个应用程序的文件的集合。工程资源管理器列出了当前工程中的窗体和模块5.工程资源管理器(projectexplorer)窗口2022年11月12日星期六兰州理工大学计算机与通信学院15⚫
工程文件的扩展名为.VBP⚫工程资源管理器下面的列表窗口,以层次列表形式组成这个工程的所有文件。⚫主要包括三种类型的文件:◆窗体文件(.FRM)存储窗体上使用的所有控件对象和有关的属性、对象相应的事件过程、程序代码。◆标准模块文件
(.BAS)所有模块级变量和用户自定义的通用过程(可以被应用程序各处调用的过程)◆类模块文件(.CLS)包含用户对象的属性及方法。2022年11月12日星期六兰州理工大学计算机与通信学院16工具箱提供一组工具,用于设计时
在窗体中放置控件生成应用程序的用户接口。系统启动后缺省的General工具箱就会出现在屏幕左边,上面有常用“部件”6.工具箱(ToolBox)窗口2022年11月12日星期六兰州理工大学计算机与通信学院17⚫定制工具箱➢添加选项卡:➢对添加的选项卡加控件的方法:(1)在已有的选项卡中拖动所
需控件(2)激活选项卡-”工程”-“部件”2022年11月12日星期六兰州理工大学计算机与通信学院18窗体布局窗口显示在屏幕右下角。用户可使用表示屏幕的小图像来布置应用程序中各窗体的位置。这个窗口在多窗体应用程序中很有用,因为这可以指定每个窗体相对于主窗体的位置。7
.窗体布局窗口2022年11月12日星期六兰州理工大学计算机与通信学院19⚫立即窗口:中断模式中调试应用程序。⚫对象浏览窗口:可查看工程定义的模块或过程,也可查看对象库、类型库、类、方法、属性及可在过程中使用的
常数。2022年11月12日星期六兰州理工大学计算机与通信学院20第二章简单的VB程序设计2.1程序设计方法的发展2.2对象的概念2.3建立简单的应用程序2.4窗体和基本控件2.5工程的管理及环境设置2.6制作成安装盘2.7使用帮助系统2022年11月12日星期六兰州理工大学计
算机与通信学院212.1程序设计方法的发展1.初期的程序设计高运行效率、少占用内存为目标2.结构化程序设计程序的可读性、可维护性为目标程序=算法+数据结构的面向过程的程序设计3.面向对象的程序设计(OOP)降低程序
的复杂性、提高软件的开法效率和改善工作界面为目标程序=对象+消息的面向对象的程序设计2022年11月12日星期六兰州理工大学计算机与通信学院22⚫结构化的分解突出过程(Howtodo?)⚫面向对象的分解突出真实世界和抽象的
对象(Whattodo?)⚫目前常用的面向对象语言有:VisualBasic、VisualC++、VisualFoxPro等⚫优点a.符合人们的思维方法b.易于软件的维护和功能的增减c.能用继承的方式减短程序开发时间d.与可视化技术结合,改善了工作界面2022年11月12日星期六兰州理工大
学计算机与通信学院232.2对象的概念一、对象和类1、类:是创建对象实例的模板,是同种对象的集合与抽象,包含了创建对象的属性描述和行为特征的定义.2、对象:是类的一个实例,继承了类的属性、方法。Vb中常用的对象有:窗体、控件等。3、控件:以图标的形式放在
工具箱中。VB中的控件分为三类:内部控件(标准控件):如工具箱上的控件,20个ActiveX控件:“工程/部件”命令加载可插入对象:Windows应用程序的对象,如Excel工作表。二、对象的建立和编辑:1、对
象的建立:两种方法2、对象的选定:单选、多选3、复制或删除对象4、对象的命名2022年11月12日星期六兰州理工大学计算机与通信学院24三、对象的三要素:属性、事件和方法(1)属性对象的性质,即用来描述和反映对象特征的参数。(2)事件
对象的响应称为事件,它发生在用户与应用程序交互时。如单击控件、鼠标移动、键盘按下等。⚫事件过程指附在该对象上的用户编写的程序代码,是事件的处理程序。⚫事件驱动过程是图形用户界面的本质,由用户控制而代码作出响应。2022年11月12日星期六兰州理工大学计算机与通信学院25VB程
序执行步骤:⚫启动应用程序,装载和显示窗体⚫窗体(或窗体上的控件)等待事件的发生⚫事件发生时,执行对应的事件过程⚫重复执行(2)和(3),直到遇到“END”结束语句结束程序的运行或单击“结束”按钮强制停止程序的运行2022
年11月12日星期六兰州理工大学计算机与通信学院26(3)方法对象的动作,即将一些通用的过程编写好并封装起来,作为方法供用户直接调用。⚫对象方法的调用格式:[对象.]方法[参数名表]例如:在窗体上显示一
行文字。Form1.Print”欢迎使用VisualBasic6.0”2022年11月12日星期六兰州理工大学计算机与通信学院272.3建立简单的应用程序设计一个VB应用程序的通用步骤:1.设计用户界面的对象2.设置对象的属
性3.编写对象事件代码4.保存文件5.程序运行和调试(解释执行:或“运行|启动”或按F5)6.建立可执行文件。(编译运行:“文件”|“生成…exe”)2022年11月12日星期六兰州理工大学计算机与通信学院28例2.1编写一个对输入字符进行转换的程序⚫转换规则为:将其中
的大写字母转换成小写字母,小写字母转换成大写字母,空格不转换,其余转换成“*”。⚫要求每输入一个字符,马上就进行判断和转换。2022年11月12日星期六兰州理工大学计算机与通信学院29⚫PrivateSubText1_KeyPress(KeyAsciiAsIntege
r)⚫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="*"⚫En
dSelect⚫Text2.Text=Text2.Text&aa⚫EndSub2022年11月12日星期六兰州理工大学计算机与通信学院30⚫PrivateSubCommand1_Click()⚫Text1.Text=""⚫Text2.Text=""⚫⚫EndS
ub⚫PrivateSubCommand2_Click()⚫End⚫⚫EndSub2022年11月12日星期六兰州理工大学计算机与通信学院312.3.4保存和运行程序⚫保存窗体文件⚫保存工程⚫程序的运行(1)编译运行模式——生成.exe
(2)解释运行模式——F52022年11月12日星期六兰州理工大学计算机与通信学院322.4窗体和基本控件一、基本属性1.Name名称属性创建的对象名称,有默认的名.在程序中,控件名是作为对象的标识而引用,不会显示在窗体上。2.Caption标题属性该属性决定了控件上显示的内
容。3.Height、width、top和left属性LeftTopHeightWidth2022年11月12日星期六兰州理工大学计算机与通信学院334.Enabled属性控件是否可操作.当设置为false时,呈暗淡色,禁止用户进行操作.5.Visible属性控件是否可见.当设置为fal
se时,用户看不到,但控件本身存在。6.Font属性Fontname字体Fontsize字体大小Fontbold是否是粗体Fontitalic是否斜体Fontstrikethru是否加一删除线Fontunderline是否带下划线例2.2在窗体上建立两个命令按钮Comm
and1和Command2,Command2的Font通过属性窗口设置,其余属性通过代码实现。2022年11月12日星期六兰州理工大学计算机与通信学院347.Forecolor前景颜色属性设置控件的前景颜色(即正文颜色).其值是一个16进制常数,用户可以在调色
板中直接选择所需颜色。8.Backcolor背景颜色属性9.Backstyle背景风格属性0-transparent:透明显示,即控件背景颜色显示不出来10.BorderStyle边框风格属性0-None:控件周围没有边框1-FixedSingle:控件带有单边框。11.Ali
gnment属性控件上正文水平对齐方式0:正文左对齐1:右对齐2:居中12.AutoSize属性控件是否根据正文自动调整大小,False.2022年11月12日星期六兰州理工大学计算机与通信学院3513.MousePointer属性指示鼠标指针的类型,当为99时为用户自定义类型。
MouseIcon属性设置鼠标的图标,当MousePointer为99时起作用。图标库在Graphics目录下,扩展名一般为.ico或.cur14.WordWarp属性为True时水平方向上下发生变化。15.TabIn
dex属性决定了按Tab键时,焦点在各个控件移动的顺序。各个控件默认的TabIndex值就是控件建立时的顺序,第一个为0.16.控件默认属性反映该控件最重要的属性,使用时可省略属性名。如:Text1.text=“Welcome”与Text1=“Welcome”是等价的。部份控件默认值:文
本框的为:Text命令按钮为:Default标签为:Caption单选/复选按钮为:Value图形/图像框为:Picture注意:Command的Default为True,当按Enter键,该控件起作用。2022年11月12日星期六兰州理工大学计算机与通信学院36默认控件名Name标题Captio
n有关属性设置Form1颜色、对齐、鼠标属性例MousePointer=99,MouseIcon=Key04.icoLabel1左对齐Alignment=0,BorderStyle=1Label2居中Alignment=1,BorderStyle
=1Label3自动AutoSize=True,WordWarp=False,BorderStyle=1Label4背景白BackColor=&H00FFFFFF&,BorderStyle=0Label5前景红ForeColor=&H000000FF&,BorderStyle=0
例:有关属性的综合应用。对象设置:效果:2022年11月12日星期六兰州理工大学计算机与通信学院37标题图标控制菜单框最小化按钮最小化按钮边框样式二、窗体1.属性:P27StartUpPosition、Icon、ControlB
oxMaxButton、MinButtonWhatsThisButton、WhatsThisHelpPicture、AutoRedrawBorderStyle(012345)WindowsState(0-正常、1-最小化、2-最大化)注:1、Pictu
re属性可在属性窗口设置,也可通过Loadpicture函数用代码来实现。函数格式为:[对象].Picture=Loadpicture(“文件路径\文件名”)对象可以是窗体、图片框、图像框,缺省时为窗体。VB可以识别的图形格式有:.bmp.gif.jpg.wmf.ico.cur等。2、两者的不同在
于:属性设置时设置的图片,会被保存起来并与窗体同时加载,而运行时加载的图片,不和应用程序一起保存。2022年11月12日星期六兰州理工大学计算机与通信学院382.事件:P28Click、DblClick、Lo
ad、UnLoad等Load当装入窗体时激发,通常用于对属性和变量初始化3.方法:P28Print、Cls、Move、Show、Hide等当在Form_Load事件中使用Print方法时,必须将该窗体的AutoRedraw设置为True,否则Print方法无效。例上述属性、Click、DblCli
ck和Load事件演示。书上例子:P282022年11月12日星期六兰州理工大学计算机与通信学院39三.标签Label1、功能:用于显示文本(输出)信息,不能作为输入信息的界面。2、属性:P293、事件:click、Dblclick、Change例2.5.显示浮雕效果的文
字,实现方法:字颜色、标签位置书上例子:P29四.文本框TextBox功能:是一个文本编辑区域,可以输入,编辑和显示正文内容。1、属性:P30•Text:正文内容Maxlength:设置正文的最多字符个数,0任意长度值.•MultiLine:是否为多行,默认一行.FALSE•ScrollBa
rs:当MultiLine为True时,该属性才有效,表示滚动条的形式0-None、1-Horizontal、2-Vertical、3-Both。•Locked:是否可被编辑属性,False,表示为可编辑。•PassWordchar:口令字
符.Text属性返回输入的数据,屏幕显示该字符,•SelStart,SelLength,SelText:选中文本的起始、长度、内容。例2.6复制选中的文本2022年11月12日星期六兰州理工大学计算机与通信学院
402.常用事件•Change:当改变文本框的Text属性时会引发该事件.•KeyPress(KeyAsciiAsInteger):同上,并可返回一个KeyAscii参数KeyAscii为13,按回车键;为0去除刚输入的字符.•LostFocus:当控件失
去焦点时发生.•GotFocus:当控件获得焦点时发生.3.常用方法[对象.]SetFocus:是把光标移到指定的文本框对象中(即设置焦点)。4.文本框的应用数据过滤例2.7要求输入合法的数字数据。当输入结束时(按Tab键),对于输
入正确的数据,显示正确信息;对输入的非数字数据,则响铃(Beep)、显示错误信息、清除文本框中的内容,并使焦点重新回到文本框。•Text2_LostFocus当输入结束按Tab键时,该事件激发•IsNumeric
(Text2):判断是否输入非数字数据.•Text2.SetFocus:使焦点重新回到文本框书上例子:P322022年11月12日星期六兰州理工大学计算机与通信学院41五.命令按钮CommandButton功能:接受用户输入的命令。输入命令可
以有三种方式:鼠标单击Tab键焦点到该按钮快捷键1.属性:P33⚫Caption:命令按钮显示的内容,可设置快捷键,例&Ok,显示Ok⚫Value:检查该按钮是否按下.该属性在设计时无效.⚫Picture:按钮可显示图片文件(.bmp和.Ico),当Sty
le为1时有效⚫Style:确定显示的形式.0只能显示文字,1文字、图形均可。⚫ToolTipText:设置工具提示,和Picture结合使用。2.事件Click2022年11月12日星期六兰州理工大学计算机与通信学院423.应用:例2.8建立一个
允许剪切、复制和粘贴的简单便笺板程序。可增加内容:利用MouseMove事件决定命令按钮的有效性,即当选中内容,“剪切”、“复制”按钮有效,否则无效。2022年11月12日星期六兰州理工大学计算机与通信学院43⚫Dimst
AsString⚫PrivateSubcmdcopy_Click()⚫st=txtnoteedit.SelText⚫cmdcopy.Enabled=False⚫cmdcut.Enabled=False⚫cmdpaste.Enabled=True⚫EndS
ub⚫PrivateSubmdcut_Click()⚫st=txtnoteedit.SelText⚫txtnoteedit.SelText=""⚫cmdcopy.Enabled=False⚫cmdcut.En
abled=False⚫cmdpaste.Enabled=True⚫EndSubPrivateSubcmdexit_Click()EndEndSubPrivateSubcmdpaste_Click()txtnoteedit.Sel
Text=stEndSubPrivateSubForm_Load()cmdcopy.Enabled=Falsecmdcut.Enabled=Falsecmdpaste.Enabled=FalseEndSub
2022年11月12日星期六兰州理工大学计算机与通信学院44⚫Subtxtnoteedit_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)⚫Iftxtnoteedit.SelText<
>""Then⚫cmdcopy.Enabled=True⚫cmdcut.Enabled=True⚫cmdpaste.Enabled=False⚫Else⚫cmdcopy.Enabled=False⚫cmdcut.
Enabled=False⚫cmdpaste.Enabled=True⚫EndIf⚫EndSub2022年11月12日星期六兰州理工大学计算机与通信学院45六、常用方法⚫Vb中使用方法的语法结构是相同的⚫[对象.]方法[参数列表]⚫1.print方法⚫形式:[对象.]print
[{spc(n)|tab(n)}][表达式列表]⚫作用:在对象上输出信息。⚫对象:可以是窗体(form)、图形框(picturebox)、打印机。若省略,则在窗体上输出。2022年11月12日星期六兰州理工大学计算机与通信学院4
6⚫表达式列表开始位置是由对象的currentx和currenty属性决定的,缺省为打印对象的左上角0,0。⚫例2-9:print方法输出图形。⚫PrivateSubForm_Click()⚫Form1.CurrentX=200⚫Form1.CurrentY=550⚫Fori=1
To5⚫PrintTab(i+5);String(6-i,"▼");_⚫Spc(6);String(i,"▲")⚫Nexti⚫EndSub2022年11月12日星期六兰州理工大学计算机与通信学院472、cls方法⚫形式:[对象.]cls(如:picture.c
ls)⚫作用:用于清除运行时在窗体或图形框中显示的文本或图形。⚫注意:⚫(1)cls方法只清除运行时在窗体或图形框中显示的文本或图形,不清除窗体在设计时的文本或图形。⚫(2)cls方法使用后,currentx和currenty属性
被设置为0。2022年11月12日星期六兰州理工大学计算机与通信学院483、move方法⚫形式:⚫[对象.]move左边距离[,上边距离[,宽度[,高度]]]⚫作用:用于移动窗体或控件,并可改变其大小。⚫对象:可以是窗体及除时钟、菜单外的所有控件,省略对象为窗体。如果对象是窗体,则“左边距离”和
“上边距离”以屏幕左边界和上边界为准,否则以窗体的左边界和上边界为准,宽度和高度表示可改变其大小。2022年11月12日星期六兰州理工大学计算机与通信学院49例2-10⚫PrivateSubForm_Load()⚫Image1.Top=0⚫Image1.Left=0⚫Imag
e1.Picture=LoadPicture(App.Path+"\1.gif")⚫EndSub⚫PrivateSubImage1_Click()⚫Image1.Move(Form1.Left+Form1.Width)\2-Form1.Left,(Form1.Top+Form1.Heigh
t)\2-Form1.Top,Image1.Width\2,Image1.Height\2⚫EndSub2022年11月12日星期六兰州理工大学计算机与通信学院50七、应用举例⚫例2-11:根据房产商提供的信息,购房者选择房型、面积、单价、按揭期等信息,编写计算
每月支付贷款的程序。⚫程序由两个窗体构成,第一个窗体输入或选择买房的数据,该窗体由列表框选择数据、标签显示数据、文本框输入数据;第二个窗体显示房屋的平面图,该窗体仅有一个图形控件。2022年11月12日星期六兰州理工大学计
算机与通信学院512.5工程的管理一、工程的组成工程文件包含了一个应用程序的所有文件:⚫工程文件(.vbp):⚫工程组文件(.vbg):⚫窗体文件(.frm):控件及属性、事件过程和自定义过程⚫窗体的二进制数据文件(.frx),自动产生同名.frx文
件。⚫标准模块文件(.bas)⚫类模块文件(.cls)⚫资源文件(.res)⚫ActiveX控件的文件(.ocx)二、创建、打开和保存工程:“文件”菜单2022年11月12日星期六兰州理工大学计算机与通信学院52三.添加、删除和保存文
件:可利用“文件”和“工程”菜单1、窗体名和窗体文件名概念窗体名:窗体的Name属性,在代码中用来引用该窗体,同一工程不能有相同的窗体名;窗体文件名:窗体存放在磁盘上的文件名,该文件包含了该窗体的所有
控件属性和代码,同一文件夹不能有相同的文件名。2、在工程中添加现存的窗体时,只是对该窗体文件的引用纳入工程。因此,如果更改窗体并保存它,会影响包含此窗体文件的任何工程。3、在工程中删除窗体时,仅将此窗体从工程里删除掉,但是窗体文件仍存在于磁盘上。但是,如果在V
B之外删除一个窗体文件,VB不能更新此工程文件,当打开此工程时,将显示一个文件丢失的错误信息。窗体文件名窗体名2022年11月12日星期六兰州理工大学计算机与通信学院53四、环境设置⚫“工具”——”选项”⚫1
.”编辑器”选项卡⚫2、“通用”选项卡4、对窗体文件改名方法:在“工程资源管理器”中--右击窗体文件--“Form另存为…”5、保存窗体文件:若只想保存窗体文件而不保存工程文件,可直接在“工程资源管理器”中选定,然后执行“文件”菜单中的相应选项。2022年11月12日星期六兰州理工大学计算机与
通信学院542.6制作成安装盘⚫2.6.1使用打包和展开向导⚫打包:把工程中用到的各种类型的文件(包括工程自身的文件、必要的系统文件和安装主文件)进行打包压缩后,存放到特定的目录下。⚫展开:把打包的文件展开到用户可以携带的用来安装的软盘、光盘等介质。⚫管理脚本:记录
打包或展开过程中的设置,便于以后做同样的操作。⚫系统的压缩文件以.cab扩展名保存。⚫2.6.2检测安装程序2022年11月12日星期六兰州理工大学计算机与通信学院55第三章VB语言基础3.1编码基础3.2数据类型3.3常量与变量3.4运算符和表达式3.5基本语句3.6数组3.7过程
3.8常用算法举例3.9程序调试2022年11月12日星期六兰州理工大学计算机与通信学院563.1编码基础一、书写要求:1.VB代码不区分字母的大小写系统关键字自动转换每个单词的首字母大写;用户自定义行以第一次为准2.语句书写自由一行可书写几个语句,之间用冒号分隔;一行最多255个字
符;一条语句可分若干行书写,用续行符(空格+下划线)连接3.注释有利于程序的维护和调试Rem或单撇号“‘”以及“编辑”工具栏的“设置注释块”;VB中注释语句会自动变为绿色4.保留行号与标号5.其他注意事项:保留字与变量之间至少有一空格;字母“l
”与数字“1”、字母“o”与数字“0”的使用。2022年11月12日星期六兰州理工大学计算机与通信学院573.2数据类型一、标准数据类型:2022年11月12日星期六兰州理工大学计算机与通信学院581、数值数据类型:IntegerLongSingleDo
ubleCurrencyByte(1)Integer和Long型用于保存整数(2)Single和Double型用于保存浮点实数(3)Currency型是定点实数或整数(4)Byte字节型用于存储二进制数2022年11月12日星期六兰州理工大学计算机与通信学院592、日期(Date)数据
类型按8字节浮点数来存储。日期范围:公元100年1月1日~9999年12月31日时间范围:0:00:00~23:59:59表示方法:一般日期形式前后加#来表示另一种是以数字序列表示日期和时间(1)一般日期表
示法:使用成对#将任何可被认作日期和时间的字符括起来。公元年份默认19年,因而填入1995年与填入95年效果一样,但年的部分输入0~29间的数字,则VB自动转换为20年。例如:#5/25/24#与#5/25/2024#等价。而#5/25/95#,
#May25,95#,#May-25-95#,#25May1995#,#1995May25#等均为合法日期格式。2022年11月12日星期六兰州理工大学计算机与通信学院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:002022年11月12日星期六兰州理工大学计算机与通信学院613、逻辑(布尔型)数据型:Boolean当逻辑型转换成整型数据时:true–(-1)false—(0)当其他类型数据转换成逻辑数据
时:非0数转换为true,0转换为false4、字符串型:String“”5、对象数据类型:Object作为32位(4个字节)地址来存储2022年11月12日星期六兰州理工大学计算机与通信学院62⚫6、变体类型:Variant
⚫是所有未定义的变量的缺省数据类型,它可以包括标准数据类型,还包含四个特殊的数据:⚫empty(空)表示未指定确定的数据⚫null(无效)表示数据不合法⚫Error(出错)指出过程中出现了一个错误条件⚫Nothing(无指
向)表示数据还没有指向一个具体对象⚫Vartype:检测变体型变量中保存的数值类型⚫如:dimt⚫Vartype(t)⚫或Vartype(667)2022年11月12日星期六兰州理工大学计算机与通信学院63二、自定义类型
让用户自己定义的数据类型,由若干个标准数据类型组成。是一组不同类型变量的集合。相当于C语言中的结构类型;Pascal中的记录类型。1.自定义类型的定义形式如下:Type自定义类型名元素名[(下标)]A
s类型名…[元素名[(下标)]As类型名]EndType其中:元素名:表示自定义类型中的一个成员下标:表示数组类型名:为标准类型2022年11月12日星期六兰州理工大学计算机与通信学院64例如,以下定义了一个有关学生信息的自定义类型:TypeStudTyp
eNoAsInteger'学号NameAsString*20'姓名SexAsString*1'性别Mark(1To4)AsSingle'4门课程成绩TotalAsSingle'总分EndType注意:(1)自定义类型一般在标准模块(.BAS)中定义,
默认是Public;在窗体必须是Private。(2)自定义类型中的元素类型可以是字符串,但应是定长字符串。(3)不要将自定义类型名和该类型的变量名混淆,前者表示了如同Integer、Single等的类型名,后者VB根据变量的类型分配所需的内存空间,存贮数据。(4)自定义类型一般和数组结合使用,
简化程序的编写。2022年11月12日星期六兰州理工大学计算机与通信学院652.自定义类型变量的声明和使用(1)声明形式:Dim变量名As自定义类型名例DimStudentAsStudType(2)引用:形式:变量名.元素名
例表示Student变量中的姓名,第4门课程的成绩,则表示如下:Student.Name,Student.Mark(4)(3)赋值:如:Student.Name=“王刚”Student.Mark(4)=982022年11月12日星期六兰州理工大学计算机与通信学院663.3常量与变量一.常量和变
量的命名规则常量:在程序运行中其值不可以改变。变量:在程序运行中其存储的值可以改变。命名规则:1.以字母或汉字开头,后可跟汉字、字母、数字或下划线组合,长度小于等于255个字符;2.不能使用VB中的关键字;3.VB中不区分变量名的大小写.4.为了增加程序的可读性,可在变量名前加一个缩写的前缀来
表明该变量的数据类型。如:strMystring、intCount2022年11月12日星期六兰州理工大学计算机与通信学院67❖VB6.0的关键字有:AsBinaryByRefByValDateElseE
mptyErrorFalseForFriendGetInputIsLenLetLockMeMidNewNextNothingNullOnOptionOptionalParamArrayPrintPrivatePropertyPublicResumeSeekSetStaticStepStri
ngThenTimeToTrueWithEvents2022年11月12日星期六兰州理工大学计算机与通信学院68二.常量(一)直接常量有数值常量(整数、长整数、定点数和浮点数)、字符串常量、布尔常量、日期常量(二)符号常量1.
系统提供的常量系统定义常量位于对象库中,可通过“对象浏览器”查看.例:vbNormal、vbMinimized、vbMaximized、vbblue等form1.windowsstate=vbmaximized‘将窗口极大化form1.windowssta
te=2‘与上面的语句等价的2022年11月12日星期六兰州理工大学计算机与通信学院692.用户声明常量形式:Const常量名[AS类型]=表达式省略[AS类型],常量的类型由表达式值的类型决定,也可在常量后加类型符。表达式:可以
是数值常数、字符串常数以及由运算符组成的表达式。对于数值常数除了可用十进制表示外,还可以使用十六进制数(数值前加&H)和八进制数(数值前加&O)。为使与变量名区分,一般常量名使用大写字母例ConstMAX=100C
onstPI=3.14159ConstPI#=3.14159ConstMAXasinteger=&O1442022年11月12日星期六兰州理工大学计算机与通信学院70三.变量1.用Dim语句显式声明变量形式:Dim变量名[AS类
型]Dim变量名类型符例DimiCountAsinteger,sAllsumAssingle等价于DimiCount%,sAllsum!对于字符串变量,根据其长度是否固定,有两种方法:Dim字符串变量名AsString
Dim字符串变量名AsString*字符数2.隐式声明未进行上述的声明而直接使用,其类型为Variant类型。建议不使用。注意:在通用声明处加OptionExplicit语句可强制显式声明变量。2022年11月12日星期六兰州理工大学计算机与通信学院7
13.4运算符和表达式一.运算符1.算术运算符例:5+10mod10\9/3+2^2结果:10取ia=32022年11月12日星期六兰州理工大学计算机与通信学院722.字符串运算符:&、+“&”和“+”,都是将两个字符串拼接起来。
"123"+"456"结果"123456""123"&"456"结果"123456"区别:若+的两旁的操作数均为数值型则进行算术加;若一个为数字字符型,另一个为数值型,则自动将数字字符转换为数值,然后
进行算术加;若一个为非数字字符型,另一个为数值型,则出错。&则不管什么类型,强制转换为字符型进行拼接。例如:"abcdef"&12345'结果为"abcdef12345""abcdef"+12345'
出错"123"&456'结果为"123456""123"+456'结果为57912000+“123”&100‘结果为“12123100”Val(left$(“12345678”,4)+mid$(“123
45678”,4,2))‘结果为123445注意:(1)"123"+True'结果为122True转换为数值-1,False转换为数值0(2)使用“&”时,最好在两侧的操作数间加入一个空格。因为Long类型变量的类型符
以及八进制、十六进制数值表示法的起始字符也为“&”。2022年11月12日星期六兰州理工大学计算机与通信学院733.关系运算符将两个操作数进行大小比较,结果为逻辑量。运算符含义实例结果=等于"ABCDE"="ABR"FALSE>大于"ABCDE">"ABR"FALSE>=大于等于"bc">=
"大小"FALSE<小于23<3FALSE<=小于等于"23"<="3"TRUE<>不等于"abc"<>"ABC"TRUELike字符串匹配"ABCDEFG"Like"*DE*"TRUEIs对象引用比较(1)关
系运算符的优先级相同;(2)“Like”运算符与通配符:“?”、“*”、“#”、“[字符列表]”、“[!字符列表]”结合使用,常用于模糊查询。其中“?”表示任何单一字符,“*”表示零个或多个字符,“#”表示任何一个数字(0~9),[字符列表]表示字符列表中的任何单一字符,[!字符列表]
表示不在字符列表中的任何单一字符。例如,找姓名变量中姓张的学生,则表达式为:姓名Like“张*”,又如找没有张字的学生,表达式为:姓名Like“[!张]”2022年11月12日星期六兰州理工大学计算机与通信学院744.逻辑运算符AND(与)OR(或)XOR(异或)EQV(等价)IM
P(蕴含)FFFFFTTFTFTTFTTFFTTFFTTTTFTT逻辑值说明:1、Not:进行取反运算;2、And:操作数均为真时,结果才为真;3、Or:操作数中有一个为真时,结果为真;4、Xor:操作数相反时,结果才为真;5、Eqv:操作数相同时,结果才为真;6、Imp:第1个操作数为真,第2
个为假时,结果才为假,其余结果均为真。7、优先级:Not>And>OR>Xor>Eqv>Imp2022年11月12日星期六兰州理工大学计算机与通信学院75⚫如果逻辑运算符对数值进行运算,则以数字的二进制值逐位进行逻辑运算。⚫(1)And运算符常用于屏蔽某些位。⚫(2)Or运算符常用于把某
些位置1。⚫(3)连续两次进行Xor运算,可恢复原值。⚫例:10and7⚫10or72022年11月12日星期六兰州理工大学计算机与通信学院76二.表达式1.表达式组成变量、常量、函数、运算符和圆括号2.书写规则(1)运算符不能相邻。例a+-b是错误的。(
2)乘号不能省略。例x乘以y应写成:x*y(3)括号必须成对出现,均使用圆括号。(4)表达式从左到右在同一基准上书写,无高低、大小。3.不同数据类型的转换运算结果的数据类型向精度高的数据类型靠.Integer<Long<
Single<Double<Currency4.优先级算术运算符>字符运算符>关系运算符>逻辑运算2022年11月12日星期六兰州理工大学计算机与通信学院77表达式书写举例sin(45*3.14/180)+(exp(10)+log(10))/sqr(x+
y+1)110lne45sin10++++yxefgabcda*b*c*d/e/f/g或a*b*c*d/(e*f*g)2022年11月12日星期六兰州理工大学计算机与通信学院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学历=“本科”)73x2022年11月12日星期六兰州理工大学计算机与通信学院1.数
学函数: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]注:函数名后有$符号,表示函数返回值为字符串。三、常用内部函数2022年11月12日
星期六兰州理工大学计算机与通信学院792.转换函数Chr(66)"B"Asc("B")66Asc(Chr(99))99Chr(Asc("K"))"K"Ucase$("abcdefg")"ABCDEFG“3.日期函数:Date返回系统日期Time返回系统时间Now返回系统日期和时间Yea
r返回年份(1)DateAdd增减日期函数(2)DateDiff间隔日期函数三、常用内部函数2022年11月12日星期六兰州理工大学计算机与通信学院804.字符串编码及操作函数(1)字符串编码Windows系统对字符采用了DBCS编码,中文2字节,西文1字节VB中字符Unic
ode编码,任何字符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区分大小写。2022年11月12日星期六兰州理工大学计算机与通信学院815.格式输出函数Format()功能:Format()可以使数值、
日期或字符串按指定的格式输出。格式:Format(表达式[,格式字符串])其中,表达式:为要格式化的数值、日期和字符串类型表达式。格式字符串:表示按其指定的格式输出表达式的值。格式字符串有三类:(1)数值格式化:将数值表达式的值按“格式字符串”指定的格式输出。(
2)日期和时间格式化(3)字符串格式化格式字符串要加双引号2022年11月12日星期六兰州理工大学计算机与通信学院82符号作用数值表达式格式字符串显示结果0实际数字位数小于符号位数,数字前后加0,大于时,整数部分原样输出、小数部分按四舍五入显示1234.5671234.567"00000
.0000""000.00"01234.56701234.57#实际数字位数小于符号位数,数字前后不加0,大于时,同上1234.5671234.567"#####.####""###.##"1234.5671234.5
7.加小数点1234"0000.00"1234.00,千分位1234.567"##,##0.0000"1,234.5670%数值乘以100,加百分号1234.567"####.##%"123456.7%$在数字前加$1234.567"$###.##"$123
4.57+在数字前加+-1234.567"+###.##"-+1234.57-在数字前加-1234.567"-###.##"-1234.57E+用指数表示0.1234"0.00E+00"1.23E-01E-与E+相似1234.567".00E-00".12E04常用数值格式符及举例2
022年11月12日星期六兰州理工大学计算机与通信学院836.Shell函数功能:Shell函数负责执行一个可执行文件(扩展名为.exe、.com、.bat),返回一个Variant,如果成功,代表这个程序的进程ID,若不成功,则会
返回0。形式:Shell(命令字符串[,窗口类型])缺省窗口类型最小化为图标。常量值描述VbHide0窗口被隐藏,且焦点会移到隐式窗口VbNormalFocus1窗口具有焦点,且会还原到它原来的大小和位置VbMinimizedFocus2窗口会以一个具有焦点
的图标来显示VbMaximizedFocus3窗口是一个具焦点的最大化窗口VbNormalNoFocus4窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动VbMinimizedNoFocus6窗口会
以一个图标来显示,而当前活动的窗口仍然保持活动Shell函数窗口类型2022年11月12日星期六兰州理工大学计算机与通信学院84X=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&"calc.exe");i=Shell(
start&“vb6.exe“)举例:i=Shell("c:\windows\calc.exe",1)j=Shell("c:\command.com",1)2022年11月12日星期六兰州理工大学计算机与通信学院85863.5基本语
句3.5.1赋值语句形式:[LET]变量名=表达式作用:将表达式的值赋值给变量名.一般用于给变量赋值或对控件设定属性值.例:sRate!=0.1Text1.Text="欢迎使用VisualBasic6.0”注意:1、当表达式的类型与变量的类型不一致时,强
制转换成左边的精度。如:iA%=10/3iA中的结果为32、虽然赋值号与关系运算符等于号都用“=”表示,VB系统会根据所处的位置自动判断是何种意义的符号。3、赋值号左边只能是变量,不能是常量或表达式。4、不能在一句赋值语句中,同时给多个变量赋值。2022年11月12日星期六兰州
理工大学计算机与通信学院873.5.2人机交互函数和过程VB与用户之间的直接交互是通过InputBox()函数、MsgBox()函数和MsgBox过程进行的。1.InputBox函数InputBox(提示[,标题][,缺省][,x坐标位置][,y坐标位置])
其中:提示提示信息,标题对话框标题,缺省输入区缺省值函数返回字符类型.例要在屏幕上显示图示的对话框:2022年11月12日星期六兰州理工大学计算机与通信学院88相应的语句如下:DimstrNameAsString*40strName=InputBo
x(“请输入你的姓名”+vbCrLf+“然后单击确定”,“输入框”)也可以使用如下语句:DimstrNameAsString*40,strS1AsString*40strS1=“请输入你的姓名”+Chr(13)+Chr(10)+“然后单击确定”strName=InputBox(strS1,“输入
框”,,100,100)当键盘输入“王晓明”后,变量strName获得键盘输入的值.2022年11月12日星期六兰州理工大学计算机与通信学院892.MsgBox函数和MsgBox过程函数形式:变量[%]=MsgB
ox(提示[,按钮][,标题])过程形式:MsgBox提示[,按钮][,标题]按钮值如下:函数返回所选按钮整数值:2022年11月12日星期六兰州理工大学计算机与通信学院90例3.2编一帐号和密码检验程序。要求:帐号不超过6位数字,有错,清除原内容再输入.密码输入时在屏幕上以“*”代替
;若密码错,显示有关信息,选择“重试”按钮,清除原内容再输入,选择“取消”按钮,停止运行。分析:帐号6位,MaxLength为6,LostFocus判断数字IsNumeric函数密码PassWordChar为“*”,MsgBox函数设置密码错对话框.2022年11月12日星期六兰州理
工大学计算机与通信学院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=t2022年11月12日星期六兰州理工大学计算机与通信学院922.If…Then…Else语句(双分支结构)(1)If<表达式>Then<语句块1>Else<语句块2>EndIf(2)If<表达式>Then<语句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*xEndIf2022年11月12日星期六兰州理工大学计算机与通信学院933.If…Then…ElseI
f语句(多分支结构)形式:If<表达式1>Then<语句块1>ElseIf<表达式2>Then<语句块2>…[Else语句块n+1]EndIf表达式1表达式2表达式nTFTF图1-3-10多分支结构语句块n语句块n+1语句块2语句块1F…T2022
年11月12日星期六兰州理工大学计算机与通信学院94例已知变量strC中存放了一个字符,判断该字符是字母字符、数字字符还是其他字符。用多分支结构实现:IfUcase(strC)>="A"AndUcase(strC)<="Z"ThenPrints
trC+"是字母字符"ElseIfstrC>="0"AndstrC<="9"ThenPrintstrC+"是数字字符"ElsePrintstrC+"其他字符"EndIf不管有几个分支,依次判断,当某条件满足,执行相应的语句,其余分支不再执行;若条件都不满
足,且有Else子句,则执行该语句块,否则什么也不执行。.ElseIf不能写成ElseIf。2022年11月12日星期六兰州理工大学计算机与通信学院95例已知百分制成绩mark,显示对应的五级制成绩哪些正确,哪些错误?方法一Ifma
rk>=90ThenPrint"优"ElseIfmark>=80ThenPrint"良"ElseIfmark>=70ThenPrint"中"ElseIfmark>=60ThenPrint"及格"ElsePrint"不及格"EndI
f方法二Ifmark<60ThenPrint"不及格"ElseIfmark<70ThenPrint"及格"ElseIfmark<80ThenPrint"中"ElseIfmark<90ThenPrint"良"ElsePrint"优"EndIf方法三Ifma
rk>=60ThenPrint"及格"ElseIfmark>=70ThenPrint"中"ElseIfmark>=80ThenPrint"良"ElseIfmark>=90ThenPrint"优"ElsePrint"不及格"EndIf正确:方法一、二错误:方法三2022年11月12日星期六兰州理工
大学计算机与通信学院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<yThe
nt=x:x=y:y=tEndIfEndIfIf语句的嵌套注意事项:书写锯齿型;EndIf与它前面最近的if配对。2022年11月12日星期六兰州理工大学计算机与通信学院97<表达式列表>:与<变量或表达式>的类型必须相同,可以是下面四种形式之一:表达式例:"A"一组枚举表达式(用逗号分隔)2,4
,6,8表达式1To表达式260To100Is关系运算符表达式Is<605.SelectCase语句(情况语句)形式:SelectCase变量或表达式Case表达式列表1语句块1Case表达式列表2语句块2…[CaseEls
e语句块n+1]EndSelect变量:只能含有一个表达式:数值型或字符串2022年11月12日星期六兰州理工大学计算机与通信学院98⚫注意:⚫关键字Is定义条件时,只能是简单的条件,不能用逻辑运算符将两个或多个简单的条件组合在一起。⚫例如“CaseIs>20andIs<40”是不合法的
。⚫而“CaseIs<2,12,13,15,Is>20”是正确的。2022年11月12日星期六兰州理工大学计算机与通信学院99例变量strC中存放了一个字符,判断该字符类型。用多分支结构实现:IfUcase(strC)>="A"
AndUcase(strC)<="Z"ThenPrintstrC+"是字母字符"ElseIfstrC>="0"AndstrC<="9"ThenPrintstrC+"是数字字符"ElsePrintstrC
+"其他字符"EndIf用SelectCase语句实现:SelectCasestrCCase"a"To"z","A"To"Z"PrintstrC+"是字母字符"Case"0"To"9"PrintstrC+"是数字字符"CaseElsePrintstrC
+"其他字符"EndSelect2022年11月12日星期六兰州理工大学计算机与通信学院100例:已知坐标点(x,y),判断其落在哪个象限。哪个能实现,哪个不能实现?方法一Ifx>0Andy>0ThenPrint"在第一象限"ElseIfx<0Andy>0ThenPrin
t"在第二象限"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的多分支结构来实现。2022年11月12日星期六兰州理工大学计算机与通信学院101例由计算机来当一年级的算术老师,
要求给出一系列的1~10的操作数和运算符,学生输入该题的答案,计算机根据学生的答案判断正确与否,当结束时给出成绩。分析:产生1~10操作数,可通过Int(10*Rnd+1)实现设置的控件名Label1Text1Picture1Command12022年11月12日星期六兰州理工大学计算机
与通信学院1026.条件函数(1)IIf函数形式是:IIf(表达式,当表达式为True时的值,当表达式为False时的值)例如,求x,y中大的数,放入Tmax变量中,语句如下:Tmax=IIf(x>y,x,y)(2)
Switch函数形式是:Switch(条件表达式1,条件表达式1为True时的值[,条件表达式2,条件表达式2为True时的值……])2022年11月12日星期六兰州理工大学计算机与通信学院103(3)Choose函数形式是:⚫Choose(数字类型变量,值为1的返回
值,值为2的返回值……)⚫例如:Nop是1-4的值,转换成+、-、×、÷运算符⚫Op=Choose(Nop,“+","-","×","÷")当值为1,返回字符串“+”,然后放入Op变量中,值为2,返回字符串“-”,依次类推;当Nop是1-4的非整数
,系统自动取Nop的整数办法在判断;若Nop不在1-4之间,函数返回Null值。2022年11月12日星期六兰州理工大学计算机与通信学院1041.在选择结构中缺少配对的结束语句对多行式的If块语句中,应
有配对的EndIf语句结束。2.多边选择ElseIf关键字的书写和条件表达式的表示ElseIf不要写成ElseIf;多个条件表达式次序问题3.SelectCase语句的使用SelectCase后不能出现多个变量;Case子句后不能出现
变量本节常见错误2022年11月12日星期六兰州理工大学计算机与通信学院1053.5.4循环结构1.For循环语句(一般用于循环次数已知)形式For循环变量=初值to终值[Step步长]语句块[ExitFor]
语句块Next循环变量循环变量<=终值语句块ExitFor语句块循环变量加步长TF循环变量得初值循环体例计算1~100的奇数和Dimi%,s%等价于:Dimi%,s%s=0s=0:i=1Fori=1To100step2re:Ifi<=100Thens=s+is=s+iNext
ii=i+2GoToreEndIf2022年11月12日星期六兰州理工大学计算机与通信学院106>0初值<终值=1时,可省略<0初值>终值=0死循环循环次数)1(+=−步长初值终值Int要注意:❖出了
循环,循环控制变量值的问题。例程序段:Fori=2To13Step3循环执行次数Printi,输出i的值分别为:Nexti25811Print:Print“I=“,i出了循环输出为:I=14❖在循环体内对循环控制变量可多次引
用;但最好不要对其赋值,否则影响原来的循环控制规律。4)1(3213=+=−Int步长2022年11月12日星期六兰州理工大学计算机与通信学院107例改变循环控制变量对循环的影响。PrivateSub
Command1_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码字符与它的编码值。2022年11月12日星期六兰州理工大学计算机与通信学院1082.Do…Loop循环语句(用于控制循环次数未知)形式1:Do{While|Until}<条件>语句块[ExitD
o语句块]Loop形式2:Do语句块[ExitDo语句块]Loop{While|Until}<条件>表达式列表1FTFTExitDo语句块语句块ExitDo语句块语句块表达式列表1图1-3-16Do…LoopWhil
e图1-3-15DoWhile…Loop2022年11月12日星期六兰州理工大学计算机与通信学院109例我国有13亿人口,按人口年增长0.8%计算,多少年后我国人口超过26亿。分析:解此问题两种方法,可根据公式:26=13*(1+0
.008)n直接利用标准对数函数求得;也可利用循环求得,程序如下:PrivateSubCommand1_Click()x=13n=0DoWhilex<26x=x*1.008n=n+1LoopPrintn,xEn
dSub2022年11月12日星期六兰州理工大学计算机与通信学院110例用辗转相除法求两自然数m,n的最大公约数和最小公倍数。分析:求最大公约数的算法思想:(1)对于已知两数m,n,使得m>n;(2)m除以n得余数r;(3)若r=0,则n为最大公约数结束;
否则执行(4);(4)mn,nr,再重复执行(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–m24EndIf22Loop2022年11月12日
星期六兰州理工大学计算机与通信学院1113、While…Wend循环:(类似于DoWhile…Loop)格式为:While<表达式><语句序列>Wend执行过程:先计算表达式的值,如果表达式的值为True,则执行循环体,遇到Wend语句后,返回到
While语句并再对条件进行测试,如为True,则继续执行循环体,如为False,则退出循环体。例:计算1+2+3+……+100Dimiasinteger,sasintegeri=1s=0Whilei<=100s=s+i
i=i+1Wend2022年11月12日星期六兰州理工大学计算机与通信学院1124.循环的嵌套一个循环体内又包含了一个完整的循环结构称为循环的嵌套.例打印九九乘法表.Fori=1To9Forj=1To9se=i&“×"&j&"="&i*jPic
ture1.PrintTab((j-1)*9+1);se;NextjPicture1.PrintNexti思考:打印上三角或下三角程序如何改动?上三角Forj=iTo9下三角Forj=1Toi2022年11月12日星期六兰州理工大学计算机与通信学院113For
ii=1To10Forjj=1To20…NextiiNextjjForii=1To10Forii=1To20…NextiiNextiiForii=1To10Forjj=1To20…NextjjNextiiForii=1To10…NextiiForii=1To10…Nextii对于循环的嵌套,要注意
以下事项:▪内循环变量与外循环变量不能同名;▪外循环必须完全包含内循环,不能交叉;▪不能从循环体外转向循环体内,反之则可以。正确错误2022年11月12日星期六兰州理工大学计算机与通信学院114本节常见错误1.不循环或死循环的问题主要是循环条件、循环初值、循环终值、循环步长的设置有问题。2.
循环结构中缺少配对的结束语句For少配对的Next3.循环嵌套时,内外循环交叉4.累加、连乘时,存放累加、连乘结果的变量赋初值问题(1)一重循环在一重循环中,存放累加、连乘结果的变量初值设置应在循环语句前。(2)多重循环:这要视具体问题分别对待。如:1!+2!+3!+…+n!5
.大数相乘产生“溢出”问题2022年11月12日星期六兰州理工大学计算机与通信学院1153.5.5其他辅助控制语句1.GoTo语句形式:GoTo{标号|行号}作用:无条件地转移到标号或行号指定的那行语句.标号是一个字符序列,行号是一个数字序列.2.开关语句:On-GoTo语句3.E
xit语句多种形式:ExitFor、ExitDo、ExitSub、ExitFunction等。作用:退出某种控制结构的执行。4.End语句多种形式:End、EndIf、EndSelect、EndWith、EndTy
pe、EndSub、EndFunction、作用:End结束一个程序的运行;其余表示某个结构的结束,与对应的结构语句配对出现。2022年11月12日星期六兰州理工大学计算机与通信学院1166.With语句形式如下:With对象语句块EndWith作用:对某个对象执行一系列的操作,而
不用重复指出对象的名称。WithLabel1.Height=2000.Width=2000.FontSize=22.Caption="MyLabel"EndWithLabel1.Height=2000Label1.Width=2000
Label1.FontSize=22Label1.Caption="MyLabel"等价2022年11月12日星期六兰州理工大学计算机与通信学院1173.6数组1、引例例:若要求100个学生的平均成绩,然后统计高于平均分的人数。aver=0Fori=1To100mark=InputBo
x("输入"+i+"位学生的成绩")aver=aver+markNextiaver=aver/100但若要统计高于平均分的人数,则无法实现。已有知识解决方法:再重复输入成绩,带来两个问题:(1)输入数据的工作量成倍增加;(2)若本次输入的成绩与上次不同,则统计的结果不
正确。解决此问题的根本方法,引入数组,始终保持输入的数据,一次输入,多次使用。2022年11月12日星期六兰州理工大学计算机与通信学院118⚫引入数组dimmark(1to100)asintegerdimiasinteger
,n%,aver!n=0fori=1to100aver=aver+mark(i)nextiaver=aver/100fori=1to100ifmark(i)>averthenn=n+1nexti2022年11月12日星期六兰州理工大学计算机与通信学院1192、数组的概念数组
不是一种数据类型,而是一组相同类型的变量的集合。在程序中使用数组的最大好处是用一个数组名代表逻辑上相关的一批数据,用下标表示该数组中的各个元素,和循环语句结合使用,使得程序书写简洁。数组元素:数组中的某一个数据项。数组元素的使用同简单变量的使用。数组:必须先声明
后使用。两类数组:静态(定长)数组、动态(可变长)数组。2022年11月12日星期六兰州理工大学计算机与通信学院1203、静态数组及声明静态数组:在声明时已确定了数组元素个数。形式:Dim数组名(下标1
[,下标2…])[As类型]维数:几个下标为几维数组,最多60维。下标:[下界To]上界下界最小为-32768,上界最大为32767,省略下界为0。下标必须为常数,不可以为表达式或变量。每一维大小:上界-下界+1数组大小:每一
维大小的乘积As类型:如果省略,默认为变体类型例:Dimmark(1to100)AsInteger2022年11月12日星期六兰州理工大学计算机与通信学院121⚫DimlArray(0To3,0To4)AsLong共有4×5个元素⚫等价于:DimlArr
ay(3,4)AsLong注意:(1)下界缺省为0,也可再重新定义数组的缺省下界为1。OptionBase12022年11月12日星期六兰州理工大学计算机与通信学院122⚫注意:(2)在静态数组声明时的下标只能是常数,而在其他地方出现的数组元素
的下标可以是变量,要加以区分。如:n=Inputbox(“输入n”)Dimx(n)AsSingle'错误的声明,下标是变量x(n)=100'数组元素的下标可以是变量,但要防止下标越界的错误发生(3)在数组声明中的下标说明了数组的整体,即每维的大小;而在程
序其他地方出现的下标表示数组中的一个元素。两者写法形式相同,但意义不同。例如:Dimx(10)AsInteger'声明了x数组有11个元素x(10)=100'对x(10)这个数组元素赋值2022年11月12日星期六兰州理工大学
计算机与通信学院123⚫4、动态数组及声明动态数组是指在声明数组时未给出数组的大小(省略括号中的下标),当要使用它时,随时用ReDim语句重新指出数组大小。形式如下:Dim数组名()ReDim数组名(下标1[,下标2…])[As类型
]例SubForm_Load()Dimx()AsSingle…n=Inputbox(“输入n”)ReDimx(n)…EndSub2022年11月12日星期六兰州理工大学计算机与通信学院124⚫注意⚫Dim、
Private、Public变量声明语句是说明性语句,可出现在过程内或通用声明段;ReDim语句是执行语句,只能出现在过程内。⚫在过程中可多次使用ReDim来改变数组的大小和维数。⚫使用ReDim语句会使原来数组中的值丢失,可以在ReDim语句后加Preserve参数来
保留数组中的数据。使用Preserve只能改变最后一维的大小,前面几维大小不能改变。⚫ReDim中的下标可以是常量,也可以是有了确定值的变量。⚫静态数组在程序编译时分配存储单元,动态数组在运行时分配存储单元。2022年11月12日星期六兰州理工大学计算机与通信学院125⚫例:Redim和Pre
serve语句的使用Dima()asintegerPrivateSubForm_Click()Dima()AsIntegerReDima(3,2)Fori=0To3Forj=0To2a(i,j)=i*jPrint"a("
;i;",";j;")=";a(i,j);""NextjNextiEndSub2022年11月12日星期六兰州理工大学计算机与通信学院126⚫PrivateSubForm_Click()⚫Dima()AsInteger⚫ReDi
ma(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⚫EndSub2022年11月12日星期六兰州理工大学计算机与通信学院1275、数组的基本操作应掌握的基本操作有:数组初始化、数组输入、输出、求数组中最大(最小)元素及下标、求和
、平均值、排序和查找等。A.数组元素的赋初值(1)用循环Dimia(1to10)AsIntegerFori=1To10ia(i)=0Nexti(2)Array函数DimibAsVariantib=Array(“
abc”,“def”,“67”)‘ib数组有3个元素,上界为2Fori=0ToUBound(ib)Picture1.Printib(i);"";Nexti2022年11月12日星期六兰州理工大学计算机与通信学院128⚫注意⚫利用Arr
ay对数组各元素赋值,声明的数组是可变数组或连圆括号都可省的数组,并且其类型只能是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)Nexti2022年11月12日星期六兰州理工大学计算机与通信学院129⚫C.数组的输入:可通过文本框,也可通过inputbox函数输入。⚫D.数组的输出:输出方阵SC中的下三角元素Fori=0To4Forj=0Toisc(i,j)=i*5+jPrintsc(i,j
);"";NextjPrint'换行Nexti2022年11月12日星期六兰州理工大学计算机与通信学院130E.求数组中最大元素及所在下标及各元素之和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)=tNexti2022年
11月12日星期六兰州理工大学计算机与通信学院1316、数组的应用a.统计:输入一串字符,统计各字母出现的次数,不区分字母大小写。分析:•统计26个字母出现的个数,先声明一个具有26个元素的数组,每个元素的下标表示对应的字母,元素的值表示对应字母出现的次数。•从输入的字符串中逐一取出字符,转换
成大写字符(不区分大小写),进行判断。Asc(“A”)=65Asc(“Z”)=122Asc(“a”)=97Asc(“z”)=90Dima(1to26)asintegerDimcasstring*1Le=len(Text1)ForI=1Tolec=UCase(Mid(Text1,I,1))If
c>="A"Andc<="Z"Thenj=Asc(c)-65+1a(j)=a(j)+1EndIfNextI2022年11月12日星期六兰州理工大学计算机与通信学院132原始数据869327a(1)a(2)a(3)
a(4)a(5)a(6)第1趟交换后269387a(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(i
Min)TheniMin=jNextjt=iA(i):iA(i)=iA(iMin):iA(iMin)=t‘将最小元素与第i个元素交换Nexti2022年11月12日星期六兰州理工大学计算机与通信学院133c.排序(冒泡法)选择法排序在每一轮排序时找最小(递增次序)数
的下标,出了内循环(一轮排序结束),再交换最小数的位置;而冒泡法排序在每一轮排序时只要将第一个与其它几个比较(或者将相邻的数两两比较),只要次序不对就交换,出了内循环,最小数已冒出。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'出了内循环,一轮排序结束,最小数已冒到最上面Nexti2022年11月12日星期六兰州理
工大学计算机与通信学院134d.排序(冒泡法)冒泡法排序:将相邻的两个数两两比较,只要次序不对就交换,出了内循环,最小数已冒出。排序进行的过程见下表。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趟排序2367892022年11月12日星期六兰州理工大学计算机与通信学院135e.数组元素的插入与删除:(1)插入在有序数组a(1ton)(原有n-1个元素)插入一个值Key元素,算法:•查找要插入的位置k(1<=k<
=n-1)•腾出位置,把最后一个元素开始到第K个元素往后移动一个位置•第k个元素的位置腾出,就可将数据Key插入(2)删除要找到欲删除的元素的位置k;然后从k+1到n个位置开始向前移动;最后将数组元素减1。14710131416192225k①②③④⑤1471013161
92225④③②①14k2022年11月12日星期六兰州理工大学计算机与通信学院136删除说明:将数组元素减1,只要将数组声明为动态数组,最后重新声明,并保留原来的值即可。如:Dima()‘声明为动态数组…Redima(1ton)‘声明为有n个元素的数组…‘查找到要删除的元素下
标为kfori=k+1ton‘从k+1个元素开始往前移a(i-1)=a(i)nextiRedimPreservea(1ton-1)‘最后将数组元素减1,并保留原来的值…‘再重新输出数组删除后的元素2022年11月12日星期六兰州理工大学计算机与通信学院1377、控件数组a、控件数组的概念:控件数
组是由一组相同类型的控件组成。它们共用一个控件名,具有相同的属性,建立时系统给每个元素赋一个唯一的索引号(Index),通过属性窗口的Index属性,可以知道该控件的下标是多少,第1个下标是0。控件数组适用于若干个控件执行的操作相似的场合,控件数组共享同样的
事件过程,通过返回的下标值区分控件数组中的各个元素。例:PrivateSubcmdName_Click(IndexAsInteger)…IfIndex=3then‘处理第四个命令按钮的操作EndIf…EndSubb、控件数组的建立:(1)设计时建立控件数组⚫在窗体上画出控件,进行
属性设置,这是建立的第一个元素⚫选中该控件,进行“Copy”进行若干次和“Paste”操作建立了所需个数的控件数组元素。⚫进行事件过程的编程。2022年11月12日星期六兰州理工大学计算机与通信学院138例建立含有
四个命令按钮的控件数组,当单击某个命令按钮,分别显示不同的图形或结束操作。PrivateSubCommand1_Click(IndexAsInteger)SelectCaseIndexCase0……"画直线"Case1……"画矩形"Case2……“画圆”CaseElseEndEndSelectEn
dSub控件名IndexCaptionCommand10直线Command11矩形Command12圆Command13结束Picture1空白——2022年11月12日星期六兰州理工大学计算机与通信学院139⚫PrivateSubcmd
_Click(IndexAsInteger)⚫Pic.Cls⚫Pic.FillStyle=5⚫SelectCaseIndex⚫Case0⚫Pic.Print"画直线"⚫Pic.Line(2,2)-(7,7)⚫⚫Case1⚫Pic.Print"画矩形"⚫Pic.Li
ne(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.S
cale(0,0)-(10,10)⚫EndSub2022年11月12日星期六兰州理工大学计算机与通信学院140(2)运行时添加控件数组建立的步骤如下:⚫在窗体上画出某控件,设置该控件的Index值为0,
表示该控件为数组,这是建立的第一个元素。⚫在编程时通过Load方法添加其余的若干个元素,也可以通过Unload方法删除某个添加的元素⚫每个新添加的控件数组通过Left和Top属性确定其在窗体的位置,并将Visible属性设置为Tru
e。例利用在运行时产生控件数组,构成一个国际象棋棋盘。要求:(1)在设计时窗体上放一个Label控件,设置其Index属性为0,BackColor为黑色。(2)程序运行时自动产生64个Label控件数组元素,BackColor黑白交替。(3)当运行时单击
棋格,显示对应的序号,并且将所有棋格颜色变反。2022年11月12日星期六兰州理工大学计算机与通信学院141例建立一个程序模拟计算器,进行正整数的输入和四则运算,还可以进行八、十六进制数的转换。它包括3个Command控件数组,即:运算符按钮Operator:在设计时建立;数字按
钮Number:设计时建立一个元素,显示“0”,运行时添加其余9个元素;数制转换按钮Tran:在设计时建立。默认控件名设置的控件名(Name)下标范围(Index)标题(Caption)Command1Operator0~4+-??=Command2Num
ber0~90123456789Command3Tran0~1OHCommand4Clea无定义CEtext1disp无定义无定义控件设置2022年11月12日星期六兰州理工大学计算机与通信学院142界面设计如下:运行界面如下:2022年11月12日星期六兰州理工大
学计算机与通信学院143数组中常见错误和注意事项1.静态数组声明下标出现变量n=InputBox("输入数组的上界")Dima(1Ton)AsInteger2.数组下标越界引用的下标比数组声明时的下标范围大或小。Dima(1To
30)AsLong,i%a(1)=1:a(2)=1Fori=2To30a(i)=a(i-2)+a(i-1)a(0)不存在Nexti3.数组维数错数组声明时的维数与引用数组元素时的维数不一致。Dima(3,5)AsL
onga(i)=104.Aarry函数使用问题只能对Variant的变量或动态数组赋值。5.获得数组的上界、下界Ubound、Lbound函数2022年11月12日星期六兰州理工大学计算机与通信学院1443.7过程⚫除了系统提供的内部函数过程和事件过程外,用户可自定
义过程:以Sub保留字开始的为子过程以Function保留字开始的为函数过程以Property保留字开始的为属性过程以Event保留字开始的为事件过程主要介绍SUB子过程和Function函数过程202
2年11月12日星期六兰州理工大学计算机与通信学院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))En
dFunction调用函数过程:Subcommand1_click()……输入若干个三角形边长S1=area(a,b,c)S2=area(c,d,e)S3=area(e,f,g)PrintS1+S2+S3EndSub计算三个三角形的面积,使用的公式相同,
不同的仅仅是边长,因此首先定义一个求三角形面积的函数过程,然后像调用标准函数一样多次调用它。2022年11月12日星期六兰州理工大学计算机与通信学院1461、函数过程的定义:自定义函数过程:(1)利用“工具”菜单下的“添加过程”命令定义,生成一个函数的框架(2)利用代码窗
口直接定义函数过程形式:[Static][Public][Private]Function函数过程名([参数列表])[As类型]局部变量或常数定义语句块函数名=返回值函数过程体[ExitFunction]语句块函数名=返回值EndFunction函数过程名:命名规
则同变量名As类型:函数返回值的类型,缺省为变体类型。参数列表形式:[ByVal]变量名[()][As类型]称为形参或哑元,只能是变量或数组名(这时要加“()”),仅表示参数的个数、类型,无值。Byval表参数是值传
递,否则是地址传递。无参时,函数名后的括号不能省略,这是函数过程的标志。函数名=返回值在函数体内至少对函数名赋值一次[ExitFunction]:表示退出函数过程2022年11月12日星期六兰州理工大学计算机与通信学院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,OldS)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$)程序运行的流程:2022年11月12日星期六兰州理工大学计算机与通信学院148二、子过程函数过程给编程带来了优点但也有不足:(1)若编写过程,不是
为了获得某个函数值,而是为了某种功能的处理,如控件的移动;(2)或者要获得多个结果,如对一组数的排序等。此时用函数过程,有些不便。VB中提供了功能更强、使用更灵活的子过程。1.引例编写一个两个数交换的过程供多次调用。Swap(x,y)子过程的定义主调程序调用Swap子过程Pub
licSubSwap(x,y)PrivateSubForm_Click()DimtDima,bt=xa=10x=yb=20y=tCallSwap(a,b)‘或者Swapa,bEndSubPrint"a=";a,",b=";bEndSub2022年11月12日星期六兰州
理工大学计算机与通信学院1492.子过程定义:[Static][Public][Private]Sub子过程名[(参数列表)]局部变量或常数定义语句块[ExitSub]语句块EndSub子过程体子过程名、参数列表规定同函数过程中对应项的规定,但当无形参时,括号也应无4.子过程与函
数过程区别:(1)函数过程名有值,有类型,在函数体内至少赋值一次;子过程名无值,无类型,在子过程体内不能对子过程名赋值;(2)调用时,子过程调用是一句独立的语句。函数过程不能作为单独的语句加以调用,必须参与表达式运算。(3)用函数过程和子过程没有严格的规定,但只要能用函数过程定义的
,肯定能用子过程定义,反之不一定。即子过程适用面广。一般当过程有一个函数值,使用函数过程较直观;反之若过程无返回值,或有多个返回值,使用子过程较直观3.子过程的调用子过程名[参数列表]或Call子过程名(参数列表)2022年11月12日星期六兰州理工大学计算机与通信学院15
0例分别编一计算某级数部分和的子过程和函数过程,并调用。级数为:精度为:...!...!212+++++nxxxneps!nxn函数过程实现求部分级数和Functionjishu1(x!,eps#)AsDoubleDimn%,s#,t#n=1:s=0:t=1DoWhile(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.000012022年11月12日星期六兰州理工大学计算机与通信学院151程序运行流程
:PrivateSubCommand1_Click()Dimf1#,f2#f1=jishu1(2,0.000001)Calljishu2(f2,2,0.000001)Print"f1=";f1,"f2=";f2EndSubSubjishu2(s#,x!,eps#)…s=表达
式EndSub找子过程名调用jishu2⑥①Functionjishu1(x!,eps#)AsDoubl…jishu1=表达式EndFunction找函数名调用jishu1②⑤⑦⑧函数名带了值返回③④⑨2022年11月12日星
期六兰州理工大学计算机与通信学院152三、参数传递在调用过程时,一般主调过程与被调过程之间有数据传递,即主调过程的实参传递给被调过程的形参(虚参),完成实参与形参的结合,然后执行被调过程体。在VB中,实
参与形参的结合有两种方法:传址(ByRef)与传值(ByVal),其中传址又称为引用,是默认的方法。区分两种结合的方法是在要使用传值的形参前加有“ByVal”关键字。1.传址与传值传址:形参得到的是实参的地址,形参值的改变同时也改变实参的值。传值:形参得到的是实参的
值,形参值的改变不会影响实参的值。选用传值还是传址的使用规则:(1)形参是数组、自定义类型时只能用传址方式,若要将过程中的结果返回给主调程序,则形参必须是传址方式。这时实参必须是同类型的变量名,不能是常量或表达式
。(2)若形参不是(1)中的两种情况,一般应选用传值方式。这样可增加程序的可靠性和便于调试,减少各过程间的关联。2022年11月12日星期六兰州理工大学计算机与通信学院153例两个变量的交换SubSwap1(ByValx%,ByValy%)t%=x:x=y:y=tEndSubSubS
wap2(x%,y%)t%=x:x=y:y=tEndSubPrivateSubCommand1_Click()a%=10:b%=20Swap1a,b'传值Print"A1=";a,"B1=";ba=10:b=20Swap
2a,b'传址Print"A2=";a,"B2=";bEndSuba的地址101010aaxx形参实参ByVal传值传地址运行结果A1=10B1=20A2=20B2=102022年11月12日星期六兰州理工大学计算机与通信
学院1542.数组参数的传递在VB中允许参数是数组,数组只能通过传址方式进行传递。在传递数组时要注意:•在实参和形参中可只写数组名,或忽略维数的定义,但圆括号不能省。•被调过程可通过Lbound和Uboun
d函数确定实参数组的下、上界。例编一函数tim,求任意一维数组中各元素之积。调用tim,求和Functiontim(a()AsInteger)Dimt#,i%t=1Fori=Lbound(a)ToUbound(a)t=t*a
(i)Nextitim=tEndFunction==511iiat==832iibt调用:SubCommand1_Click()Dima%(1To5),b%(3To8)…t1#=tim(a())t2#=tim(b())Printt1,t2EndSub2022年11月12日星期六兰州理工大学计算
机与通信学院155四、变量、过程的作用域作用域:变量、过程可被访问的范围。变量、过程随所处的位置不同,可被访问的范围不同。1.过程的作用域窗体/模块级:加Private关键字的过程,只能被定义的窗体或模块中
的过程调用。全局级:加Public关键字(缺省)的过程,可供该应用程序的所有窗体和所有标准模块中的过程调用。2022年11月12日星期六兰州理工大学计算机与通信学院1562.变量的作用域局部变量:在过程内用Dim声明的变量(或不加声明直接使用
的变量),只能在本过程中使用。窗体/模块级变量:在“通用声明”段中用Dim语句或用Private语句声明的变量,可被本窗体/模块的任何过程访问。全局变量:在“通用声明”段中用Public语句声明的变量,可被本应用程序的任何过程或函数访问。2022年11月12日
星期六兰州理工大学计算机与通信学院157例如在下面一个标准模块文件中不同级的变量声明:PublicPaAsinteger'全局变量PrivateMbAsstring*10'窗体/模块级变量SubF1()DimFaAsinteger'
局部变量…EndSubSubF2()DimFbAsSingle'局部变量…EndSub2022年11月12日星期六兰州理工大学计算机与通信学院158若在不同级声明相同的变量名,系统按局部、窗体/模块、全局次序访问
(即优先访问作用域小的变量名)。如:PublicTempAsinteger'全局变量SubForm_Load()DimTempAsInteger'局部变量Temp=10'访问局部变量Form1.Temp=20'访问全局变量必须加窗体名PrintForm1.Temp,Temp
'显示2010EndSub2022年11月12日星期六兰州理工大学计算机与通信学院1593.静态变量局部变量声明:Dim声明,随过程的调用而分配存储单元,每次调用都对变量初始化;过程体结束,变量的内容自
动消失,存储单元释放。Static声明,每次调用过程,变量保持原来的值。声明形式:Static变量名[AS类型]StaticFunction函数过程名([参数列表])[As类型]StaticSub子过程名[(参数列表)]过程名前加Static,表示该过程内的局部变量
都是静态变量。例比较Dim和Static的区别。PrivateSubForm_Click()Dimi%,isum%Fori=1To5isum=sum(i)Printisum;NextiEndSubPrivateFun
ctionsum(nAsInteger)DimjAsIntegerj=j+nsum=jEndFunction结果为:12345StaticjAsInteger,结果?结果为:13610152022年11月12日
星期六兰州理工大学计算机与通信学院160Subf1(x)…x=f2(xx)*3…EndSubSubCommand1_Click()……Callf1(y)EndSubFunctionf2(x)……f2=f3(x)+3E
ndSubFunctionf3(x)……f3=x*xEndSubSubf1(x)…Callf1(y)EndSub过程的直接调用SubCommand1_Click()……Callf1(y)EndSub过程的递归调用五、递归:2022年11月12日星期六兰州理工大学计算机与通信学院1611.递归的概念
用自身的结构来描述自身就称为“递归”。例对阶乘的定义:)!2()1()!1()!1(!−−=−−=nnnnnn2.递归过程过程在自身定义的内部调用自己。例编fac(n)=n!的递归函数Functionfac(nAsInteger)AsIn
tegerIfn=1Thenfac=1Elsefac=n*fac(n-1)EndIfEndFunction−==1)1fac(*11)fac(nnnnnSubCommand1_Click()Pri
nt“fac(4)=”;fac(4)EndSub结果:fac(4)=242022年11月12日星期六兰州理工大学计算机与通信学院162递推回归在递归处理中,用栈来实现。栈中存放形参、局部变量、返回地址。递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。回归过程:不断从栈中弹出
当前的参数,直到栈空。注意: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)2022年11月12日星期六兰州理工大学计算机与通信学院163例利用递归求最大公约数==0Mod)Mod,gcd(0Mod),gcd(nmnmnnmnnmPublicFunctiongcd(mAsInteger
,nAsInteger)AsIntegerIf(mModn)=0Thengcd=nElsegcd=gcd(n,mModn)EndIfEndFunctionPrivateSubForm_Click()Printgcd(10,4)EndSub202
2年11月12日星期六兰州理工大学计算机与通信学院164分析以下子过程的功能,当n=100,r=8,结果是多少?PublicSubf(ByValn%,ByValr%)Ifn>rThenCallf(n\r,r)PrintnModr;EndSubPrivateSubCommand1_Click()Ca
llf(100,8)EndSub显示结果1442022年11月12日星期六兰州理工大学计算机与通信学院165例:打印分形图从一个大的等边三角形开始,将其三条边的中点进行连线,分成相同的4个三角形,除中间外的3个三角形再重复上述过程,直到满足给定条件的底
层为止。实现该方法采用递归子过程程序最简洁。2022年11月12日星期六兰州理工大学计算机与通信学院166⚫PrivateSubPicture1_Click()⚫DimnAsInteger⚫n=Inp
utBox("输入n的值")⚫Picture1.PrintTab(5);"递归n="&n&"时的图形"⚫Picture1.Scale(0,600)-(600,0)⚫Calltriangle(30,320,570,30,570,n)⚫EndSub⚫PrivateSub
triangle(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⚫Calltriangle(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⚫EndSub2022年11月12日星期六兰州理工大学计算机与通信学院167本节重点和难点1.确定自定义的过程是子过程还是函数过程函数过程名有值,子过程名无值。过程有一个返回值,则使用函数过程;若返回多个值或无返回值,一般使用子过程。2.过程中形参
的个数和传递方式的确定过程中参数的作用是实现过程与调用者的数据通信。(1)从主调程序获得初值,值传递。(2)将结果返回给主调程序,地址传递。3.实参与形参结合时对应问题个数、类型、位置、次序一一对应。形参是值传递,对应实参可以是表达式、常量、数组元素。形参是地址传递,
对应实参只能是简单变量。4、数组、记录类型、对象只能是地址传递。2022年11月12日星期六兰州理工大学计算机与通信学院1684.变量的作用域问题局部变量、静态变量、全局变量特点、作用5.递归调用出现“栈溢出”递归过程中有终止的条件和终止时的值或某种操作;每递归调用一次,其
中的参数要向终止方向收敛。2022年11月12日星期六兰州理工大学计算机与通信学院169递归常见错误:递归调用出现“栈溢出”在递归调用时,其中的参数要向终止方向收敛。如下求阶乘的递归函数过程:PublicFunctionfac(nAsInteger)AsInteg
erIfn=1Thenfac=1Elsefac=n*fac(n-1)EndIfEndFunctionPrivateSubCommand1_Click()Print“fac(5)=”;fac(5)Pri
nt“fac(5)=”;fac(-5)‘栈溢出EndSub2022年11月12日星期六兰州理工大学计算机与通信学院1703.8常用算法举例算法是对某个问题求解过程的描述一、若干初等数学问题:1.累加、连乘1~100的5或7的倍数的和Sum=0Fori=1To100IfiMod5=0OriM
od7=0ThenSum=Sum+iEndIfNextiPrintSum3~10的乘积t=1Fori=3To10t=t*iNextiPrintt2022年11月12日星期六兰州理工大学计算机与通信学院171例求自然对数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!11ei2022年11月12日星期六兰州理工大学计算机与通信学院1722.求素数素数是一个大于2,且不能被1和本身以外的整数整除的整数。判别某数m是
否为素数最简单的方法是:对于m从i=2,3,…,m-1判别m能否被i整除,只要有一个能整除,m不是素数,否则m是素数。例求100以内素数的代码:Form=2To100Fori=2Tom-1If(mModi)=0ThenGoToNotNextMNextiPrintmNotNextM:N
extmm是否为素数求100以内的素数思考:此例用GoTo语句对非素数不作判断,若不用GoTo语句,如何修改程序?例:用筛选法求素数2022年11月12日星期六兰州理工大学计算机与通信学院1733.穷举法“穷举
法”也称为“枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。例百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡
方案。设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为:x+y+z=1003x+2y+0.5z=100三个未知数,两个方程,此题有若干个解。解决此类问题采用“试凑法”,把每一种情况都考虑到。方法一:最简单三个未知数利用三重循环来实现
。方法二:从三个未知数的关系,利用两重循环来实现。2022年11月12日星期六兰州理工大学计算机与通信学院1744.递推法“递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由
新值代替旧值。例猴子吃桃子。小猴在某天摘桃若干个,当天吃掉一半多一个;第二天吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半多一个,到第7天要吃时只剩下一个,问小猴共摘下了多少个桃子?分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的
桃子……。设第n天的桃子为xn,那么它是前一天的桃子数的xn-1的一半减1,即xn-1=(xn+1)*22022年11月12日星期六兰州理工大学计算机与通信学院1755.最小、最大值在若干个数中求最大值,一般先假设一个
较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较。例随机产生10个100~200之间的数,求最大值。PrivateSubCommand1_
Click()Max=100Fori=1To10x=Int(Rnd*101+100)Printx;Ifx>MaxThenMax=xNextiPrintPrint"最大值=";MaxEndSub2022年11月12日星期六兰州理工大学计算机与通信学院1766、数制转换例
将一个十进制整数m转换成r(2-16)进制字符串。方法:将m不断除r取余数,直到商为零,以反序得到结果。2022年11月12日星期六兰州理工大学计算机与通信学院1777、例加密和解密简单加密的思想是:将每个字母C加一序数K,式子c=chr(Asc(c)
+k),例如序数k为5,这时“A”➔“F”,“a”➔“f”,“B”➔“G”…当加序数后的字母超过“Z”或“z”则c=hr(Asc(c)+k-26)。解密为加密的逆过程。2022年11月12日星期六兰州理工大学计算机与通信学院
178二、排序选择、冒泡、插入法排序、合并排序等。前两种排序欲排序的数据全部输入后,再进行排序;插入法排序每输入一项,马上插入到数组应在的位置,数组始终有序。例插入排序,实现的步骤:(1)输入欲排序的数据项x;在数组a中找x应所处
的位置j;(2)从数组的最后一个元素开始到下标j依次往后移,使j位置空出;(3)将x放入位置j处,一个数据插入完成;(4)有若干个数重复(1)~(3)。2022年11月12日星期六兰州理工大学计算机与通信学院179例合并排序,将两个有序的数组合并成另一个有序的数
组。假设有序的数组为A、B,合并后的数组为C。合并排序的思想为:(1)先在A、B数组中各取第一个元素进行比较,将小(递增次序)的元素放入C数组;(2)取小的元素所在数组的下一个元素与上次比较后较大的元素比较,重复上述过程,直到某个数组被先排完;(3)将另一个数组剩余元素抄入C数组,
合并排序完成。2022年11月12日星期六兰州理工大学计算机与通信学院180三、查找1、顺序查找。顺序查找根据查找的关键值与数组中的元素逐一比较(数组可无序)PublicSubSearch(a()AsVariant,ByValkeyAsVariant,index%)Di
mi%Fori=LBound(a)ToUBound(a)Ifkey=a(i)Then'找到,元素的下标在index中,结束查找index=iExitSubEndIfNextiindex=-1'找不到,index形参的值为-1EndSub平均查找次数n/22022年11月12日星期六兰州理工大
学计算机与通信学院181Key<a(mid)high=mid-1查找区域缩小一半,继续Key=a(mid)找到结束Key>a(mid)low=mid+1查找区域缩小一半,继续直到找到或查找区域中无元素.本例用递归实现Subbirsearch(a(),
low%,high%,key,index%)2、二分法查找(折半法查找)要查找的数组必须有序。思想:要查找的关键值Key同数组的中间mid项元素比较:12345678111222333444555666777888Lowhighmid444Key2022年1
1月12日星期六兰州理工大学计算机与通信学院182四、二分法求根思想:已知求根区间[a,b]有一根,每次把求根区间缩小一半,直到找到解或求根区间足够小。方法:求[a,b]的中点c,判断f(c)=0,c为求得的根,结束;f(a)与f
(c)同号,则[a,c]无根,c代替a;否则[c,b]无根,c代替b;使求根区间缩小一半,重复上述步骤,直到区间小于精度。xbaacf(x)PublicFunctionhalfRoot(ByVala!,By
Valb!)Dimc!DoWhileAbs(b-a)>0.00001c=(a+b)/2Iff(c)=0ThenExitDoElseIff(a)*f(c)>0Thena=cElseb=cEndIfLoophalfRoot=cEndFunction2022年11月12日星期六兰州理工大学计算
机与通信学院183五、字符串处理例编写一个英文打字训练的程序,要求如下:(1)在标签框内随机产生30个字母的范文;(2)当焦点进入文本框时开始计时,并显示当时时间;(3)在键入文本框按产生的范文输入相应的字母;(4)当键入满了30个字母后结束计时,禁止向文本框
输入内容,与范文逐一比较,显示打字的速度和正确率。2022年11月12日星期六兰州理工大学计算机与通信学院1843.9程序调试一.错误类型(1)编辑错误在编辑代码时,VB会对键入的代码直接进行语法检查。当发现代码存在打字错误,遗漏关键字或标点符等语法错误,VB在Form
窗口中弹出一个子窗口,提示出错信息,出错的那一行变成红色。这时,用户必须单击“确定”按钮,关闭出错提示窗,然后对出错行进行修改。2022年11月12日星期六兰州理工大学计算机与通信学院185(2)编译错误编译错误指按了“启动”按钮,VB开始运行程序前,先编译执行的程序段时,产生的错误。
此类错误由于用户未定义变量、遗漏关键字等原因产生。这时,VisualBasic也弹出一个子窗口,提示出错信息,出错的那一行被高亮度显示。2022年11月12日星期六兰州理工大学计算机与通信学院186(3)运行错误运行时错误指VB在编译
通过后,运行代码时发生的错误。这类错误往往是指令代码执行了一非法操作引起的。例如类型不匹配、试图打开一个不存在的文件等。2022年11月12日星期六兰州理工大学计算机与通信学院187(4)逻辑错误程序运行后,得不到所期望的结果,这说明程序存在逻辑错误。这类错误往往是程序存
在逻辑上的缺陷所引起。例如,运算符使用不正确、语句的次序不对、循环语句的起始、终值不正确等。通常,逻辑错误不会产生错误提示信息,故错误较难排除,需要程序员仔细地阅读分析程序以及调试。2022年11月12日星期六兰州理工大学计算机与通信学院188二.调试错误(1)VB的三种模式•设计模式[
设计]进行程序的界面设计、属性设置、代码编写等。•运行模式[运行]执行“运行/启动”命令,可以查看程序代码,但不能修改。•中断模式[中断]当在运行模式,按了“中断”命令或当程序出现运行时错误时进入中断模式。可以查看代码、修改代码、检查数据。(2)调试窗口
有三个调试窗口,它们是:“立即”窗口、“监视”窗口、和“本地”窗口。可单击视图菜单中的对应命令打开这些窗口。2022年11月12日星期六兰州理工大学计算机与通信学院189(3)设置断点和逐语句跟踪断点是告诉VB挂起程序执行的一个标记,当程
序执行到断点处即暂停程序的运行,进入中断模式。设置或删除断点的步骤:中断模式下,直接查看某个变量的值,只要把鼠标指向所关心的变量处,稍停一下,就在鼠标下方显示该变量的值。断点标记当前行2022年11月12日星期六兰州理工大学计算机与通信学院第四章常用控件与窗体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--Graphical:图形方
式4.1选择性控件复选框(CheckBox)单选钮(OptionButton)列表框(ListBox)组合框(ComboBox)2022年11月12日星期六兰州理工大学计算机与通信学院1922、事件:C
lick单选和复选按钮都能接收Click事件,当单击时它们会自动改变状态。例用单选钮和复选框设置文本框的字体。2022年11月12日星期六兰州理工大学计算机与通信学院193二、框架(Frame):框架内控件的创建方法:方
法1:单击工具箱上的工具,然后用出现的“+”指针,在框架中适当位置拖拉出适当大小的控件。不能使用双击工具箱上图标的自动方式。方法2:将控件“剪切”到剪贴板,然后粘贴(Ctrl+V)到框架。框架设Caption为"字体"2022年11月12日星期六兰州理工大学计算机与通信学院194Capt
ion属性:框架标题Enabled属性False:标题呈灰色,不允许对框架内的对象进行操作。Visible属性True:框架及其控件可见。False:框架及其控件被隐含起来。事件:Click、DblClick一般不需要编写框架的事件过程。例框架用法示例2022年11月12日
星期六兰州理工大学计算机与通信学院195三、列表框(ListBox):显示项目列表,用户可从中选择一个或多个项目。如果有较多的选择项,超出所画的区域而不能一次全部显示时,VB会自动加上滚动条。通常在一个列表框中只能选择一项,但当列表框的MultiSelect
属性为1或2时允许多项选择。列表框最主要的特点是只能从其中选择,而不能直接修改其中的内容。List1列表框各主要属性的值:List1.ListIndex=3(下标从0开始的)List1.ListCount=5List
1.Selected(3)=True,其余为False。List1.Sorted=False,没有排序。List1.Text为“cox”,与List1.List(List1.ListIndex)相等2022年11月12日星期六兰州理工大学计算机与通信学院1961、属性
:(1)基本属性:Name、Enabled、Visible、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.ListInde
x)=List1.Text。(8)MultiSelect:0-None:禁止多项选择(默认)。1-Simple:简单多项选择。鼠标单击或按空格键表示选定或取消选定一个选择项。2-Extended:扩展多项选择。按住Ctrl键同时用
鼠标单击或按空格键表示选定或取消选定一个选择项;按住Shift键同时单击,或按住Shift并且移动光标键,就可以从前一个选定的项扩展选择到当前选择项,即选定多个连续项。其中:List既可在设计状态设置,也可在程序中设置或引用。Sorted、MultiSelect只能在设计状态设置。L
istIndex、ListCount、Selected、Text只能在程序中设置或引用。2022年11月12日星期六兰州理工大学计算机与通信学院1972、方法列表框中的选择项可以简单地在设计状态通过List属性设置,也可通过相应方法来实现。(1)AddItem:
添加一个项目形式:对象.AddItemitem[,index]其中:对象:可以是列表框或组合框item:必须是字符串表达式,是要加入的项目index:决定新增项目在列表框或组合框中的位置,如果省略,则添加在最后。对于第一个项目,inde
x为0。(2)RemoveItem:删除一个项目形式:对象.RemoveItemindex其中:对象、index同上(3)Clear:清除所有项目形式:对象.Clear其中:对象可以是列表框、组合框或剪贴板。2022年11月12日星期六兰州理工大学计算机与通信学院1983、事件:Click、Dbl
Click一般不需要编写Click事件过程通常在单击命令按钮或发生DblClick事件时才读取Text属性例1对列表框进行项目添加、修改和删除操作。例2对列表框进行项目添加操作,并去掉重复值。2022年11
月12日星期六兰州理工大学计算机与通信学院199下拉式组合框简单组合框下拉式列表框Combo1组合框各主要属性的值:Combo1.ListIndex=0Combo1.ListCount=8Combo1.Sorte
d=FalseCombo1.Text为“李宁”四、组合框(ComboBox):组合框是组合了文本框和列表框的特性而形成的一种控件。组合框在列表框中列出可供用户选择的选项,另外还有一个正文框。当用户选定某项后,该项内容自
动装入文本框中。当列表框中没有所需选项时,除了下拉式列表框(Style为2)之外都允许在文本框中用键盘输入,但输入的内容不能自动添加到列表框中。组合框占用屏幕空间比列表框要小。组合框有三种不同的风格,由Style属性值决定。2022年11月12日星期六兰州理工大学计算机与通信学院200例对组
合框进行项目添加、修改和删除操作。1、属性:组合框拥有列表框和文本框的大部分属性。组合框也有SelLength、SelStart、SelText这三个文本框才有的属性。组合框特有的属性:Style(列表框特有的属性:MultiSele
ct、Selected)类型Style输入下拉式组合框0(默认)能简单组合框1能下拉式列表框2不能2、方法:同列表框3、事件:Click,只有简单组合框才有DblClick事件2022年11月12日星期六兰州理工大学计算机与通信学院2016.2滚动条1、重
要属性Max:最大值-32,768~32,767Min:最小值-32,768~32,767SmallChange最小变动值,单击箭头时移动的增量值。LargeChange最大变动值,单击空白处时移动的增量值。Value滑块所处位置所代表的值。水平滚动条垂直滚动条SmallChangeMinV
alueMaxSmallChangeLargeChangeLargeChangeSlider控件Slider须通过:“工程/部件”,选择:MicrosoftWindowscommonControl6.0部件2022年11月12日星期六兰州理工大学计算机与通信学院202
2、事件:Scroll:拖动滑块时会触发Scroll事件。Change:Value属性改变时触发Change事件。例1用一个文本框(txtSpeed)显示滚动条(hsbSpeed)滑块当前位置所代表的值。例2调色板程序。SubhsbSpee
d_Change()Text1.Text=HScroll1.ValueEndSub2022年11月12日星期六兰州理工大学计算机与通信学院203时钟控件能有规律地以一定的时间间隔激发计时器事件,周期性地自动执行相应的程序代码
。它必须依附在窗体上,在程序运行时,它是不可见的。以Interval为时间间隔产生Timer事件。属性:Interval属性单位:ms(0.001s),介于0~64767之间,所以最大时间间隔大约1min。如:0.5秒是500ms。
Interval=0:屏蔽计时器。Enabled属性:True:有效计时False:停止时钟工作事件:只有Timer事件例1定时的闹钟:在文本框中设置定时时间,单击“定时”按钮开始定时。例2动态显示图片。4.2时钟控件(Timer
)2022年11月12日星期六兰州理工大学计算机与通信学院2044.3菜单设计一、菜单编辑器的使用工具/菜单编辑器(CTRL+E)窗体上快捷菜单/菜单编辑器常用属性:1.标题(Caption)热键:前面加&2.名称(Nam
e)文本框分隔符也应有名称。3.快捷键(Shortcut)菜单名没有快捷键4.复选(Checked)检查框TRUE有✓5.有效(Enabled)检查框6.可见(Visible)检查框菜单列表框菜单项属性操作按钮
每一个菜单项都是一个控件对象,只有Click事件。标题属性用于设置应用程序菜单上出现的字符,名称属性用于定义菜单项的控件名,这个属性不会出现在屏幕上,在程序中用来引用该菜单。2022年11月12日星期六兰州理工大学计算机与通信学院205例建立一个有菜单功能的文本编辑
器。假定所要建立的菜单结构如下所示。建立菜单大致可分成以下三个步骤:1、建立控件。2、设计菜单3、为事件过程编写代码。标题名称快捷键标题名称快捷键文件FileMenu….新建FileNewCtrl+N….打开FileOpenCtrl+O….-Bar1….保存Fi
leSaveCtrl+S….另存为FileSaveAs….-Bar2….退出FileExit编辑EditMenu….复制EditCopyCtrl+C….剪切EditCutCtrl+X….粘贴EditPasteCtrl+V
2022年11月12日星期六兰州理工大学计算机与通信学院206二、菜单项增减在程序运行时,菜单随时增减,如“文件”菜单能保留最近打开的文件数。这同控件数组一样,使用菜单数组。步骤:1.在菜单设计时,加
入一个菜单项,其Index为0(菜单数组),Visible为False。2.在程序运行时,通过Load方法向菜单数组增加新的菜单项。同样,要删除所建立的菜单项,使用UnLoad方法向菜单数组减少菜单项。2022年11月12日星期六兰州理工大学计算机与通信学院207例在文件菜单中
保留最近打开的文件清单。在上例的基础上,在文件菜单的“退出”选项前面(或后面)插入一个菜单项RunMenu,设置索引属性为0,使RunMenu成为菜单数组,Visible属性设置为False,再插入一个名为Bar3的分隔线,Visib
le也设置为False。在菜单的最后加入名称为MenuDel,标题为“删除菜单项”的菜单。假定要保留的文件清单限定为4个文件名,设定一个全局变量iMenucount记录文件打开的数量,当其小于5时,每打开一个文件,就用Load方法向RunMenu()数组加入动态菜单成员,并设置菜
单项标题为所打开的文件名,对于第5个以后打开的文件不再需要加入数组元素,采用先进先出的算法刷新记录最先使用的动态菜单成员的标题。2022年11月12日星期六兰州理工大学计算机与通信学院208三、弹出菜单(快捷菜单)弹出菜单是独立于窗体菜单栏而显示在窗体
内的浮动菜单。显示位置取决于单击鼠标键时指针的位置。设计与普通菜单相同(如果不希望菜单出现在窗口的顶部,该菜单名Visible属性设置为False)。菜单弹出的方法:[对象.]PopupMenu菜单名[,标志,x,y]标志,表示弹出的位置和触发的键SubText1_MouseDo
wn(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=2ThenPopupMenuEditMenu,vbPopupMenuCenterAlignEndSub例弹出菜单。在上例中加
入有关“编辑”这部分菜单的弹出菜单功能,用鼠标右键单击Text1时能弹出EditMenu菜单中的菜单项,并以鼠标指针坐标X为弹出菜单的中心,可使用如下代码:2022年11月12日星期六兰州理工大学计算机与通信学院2094.4对话框VB中有三种对话框
:1、预定义的对话框:系统定义的。用InputBox、MsgBox调用。2、通用对话框:标准对话框。有六种(打开、另存为、颜色、字体、打印和帮助)调用方法:“工程”-“部件”-MicrosoftCommonDialogControl6.03、用户自定义对话框:用户自定义的含有控
件的窗体。2022年11月12日星期六兰州理工大学计算机与通信学院210一、通用对话框(CommonDialog)主要共同属性:Action:打开通用对话框。DialogTiltle:通用对话框标题。CancelError:True:选择“取消”按钮,出现错误警告,自
动将错误对象Err.Number置为32755(cdlCancel)以便供程序判断。False(缺省):选择“取消”按钮,没有错误警告。通用对话框的类型Action方法打开(Open)1ShowOpen另存为(S
aveAs)2ShowSave颜色(Color)3ShowColor字体(Font)4ShowFont打印机(Printer)5ShowPrinter帮助(Help)6ShowHelp打开通用对话框:在设计状态,CommonDialog控件以图标的形式显示在窗
体上,其大小不能改变,在运行时,控件本身被隐藏。要在程序中显示通用对话框,必须对控件的Action属性赋值,或者使用说明性的Show方法。2022年11月12日星期六兰州理工大学计算机与通信学院2111.“文件”对话框(打开、保存)需
设置的属性:FilterFileNameInitDirFilterIndex=12022年11月12日星期六兰州理工大学计算机与通信学院212属性FileName:设置和得到用户所选的文件名(包含路径)FileTitle:不包含路径Filter:过滤文件类型,使文件列表框中只显示指定类型的文件。
其格式为:文件说明|文件类型。例如,Documents(*.DOC)|*.DOC|TextFiles(*.TXT)|*.txt|AllFiles|*.*FilterIndex:决定在文件类型列表框中显示第几组类型的文件。InitDir:初始化路径。若
缺省,表示当前目录。“打开”文件对话框属性页DialogTiltleFileNameInitDirFilterFilterIndexDefaultExt2022年11月12日星期六兰州理工大学计算机与通信学院213例1用命令按钮的Click事件
显示文件打开对话框CommonDialog1.InitDir=“C:\Windows”'设置初始目录CommonDialog1.Filter="文本文件|*.Txt"'过滤文件类型CommonDialog1.CancelError=True'控制取消按钮CommonDia
log1.ShowOpen'打开对话框2.“另存为”对话框没有提供真正的存储文件操作,仍需要编程完成储存操作。属性基本和“打开”对话框相同,另外还有一个DefaultExt:所存文件的缺省扩展名3.“颜色”对话框属性Color:返回或设置选定的颜色。例2“颜色”对话框的使用
。在上例中增加一个命令按钮,用于打开“颜色”对话框,通过“颜色”对话框设置标签前景颜色。2022年11月12日星期六兰州理工大学计算机与通信学院2144.“字体”对话框:在使用之前,必须设置Flags属性值Flags属性:指示所显示的字体类型,必须设置。cdlCFScreenFonts&H1屏幕字
体cdlCFPrinterFonts&H2打印机字体cdlCFBoth&H3打印机字体和屏幕字体。cdlCFEffects&H100显示删除线和下划线检查框以及颜色组合框FontUnderlineFontNameFontBold、FontItalicFontSizeFontSt
rikethruColorMin、Max例3用“字体”对话框设置文本框的字体,要求字体对话框内出现删除线、下划线,并可控制颜色元素。2022年11月12日星期六兰州理工大学计算机与通信学院2155.“打
印”对话框属性FromPage:起始页号ToPage:终止页号Copies:打印份数如果打印驱动程序不支持多份打印,该属性有可能始终返回1。例4打印对话框的使用。可用Printer对象表示默认打印机6.“帮助”对话框帮助文件需要用其它的工具制作,如Microsoft
WindowsHelpCompiler。属性:HelpCommand:在线Help帮助类型HelpFile:Help文件的路径及其名称HelpKey:在帮助窗口显示由该帮助关键字指定的帮助信息。例5帮助对话框的应用2022年11月12日星期六兰州理工大学计算机与通信学院216
二、自定义对话框用户所创建的含有控件的窗体。属性值说明BorderStyle1边框类型为固定的单个边框,防止对话框在运行时改变尺寸ControlBoxFalse取消控制菜单框MaxButtonFalse取消最大化按钮
,防止对话框在运行时被最大化MinButtonFalse取消最小化按钮,防止对话框在运行时被最大化对话框属性设置2022年11月12日星期六兰州理工大学计算机与通信学院217显示对话框⚫模式对话框frmAbout.ShowvbModal‘vbModal是值为1的常数⚫无模式对话
框frmAbout.Show‘不带style参数卸载对话框UnloadfrmAbout隐藏对话框frmAbout.Hide2022年11月12日星期六兰州理工大学计算机与通信学院2184.5多重窗体1.添加窗体⚫“工程|添加窗体”新建现存添加“现存”窗体时要注意:➢防止多个窗体的Name相同而不
能添加;➢添加的窗体实际是将其它工程中已有的窗体加入,多个工程共享窗体;➢通过“另存为”命令以不同的窗体文件名保存,断开共享。2022年11月12日星期六兰州理工大学计算机与通信学院2192.设置启动窗体设置启动对象3.窗体语句(1)Load语句:
装入窗体到内存但没有显示窗体形式:Load窗体名称(2)Unload语句:从内存删除窗体形式:Unload窗体名称UnloadMe关闭窗体自己“工程/属性”“启动对象”2022年11月12日星期六兰州理工大学计算机与通信学院2204.窗体方法(1)Show方法:显示一个窗体
,它兼有加载和显示窗体两种功能。[窗体名称].Show[模式]1-Modal(模式型):用户无法将鼠标移到其他窗口,只有在关闭该窗体后才能对其它窗体进行操作。0-Modeless(非模式型):可以对其它窗体进行操作。“模式”的默认值为0。当窗体成为活动窗口
时发生窗体的Activate事件。(2)Hide方法:隐藏窗体,但并没有从内存中删除。[窗体名称.]Hide2022年11月12日星期六兰州理工大学计算机与通信学院2215.不同窗体间数据的存取(1)存取控件的属性另一窗体名.控件名.属性(2)存取变量的值另一窗
体名.全局变量名为了方便起见,要在多个窗体中存取的变量一般应放在标准模块(.BAS)内声明。2022年11月12日星期六兰州理工大学计算机与通信学院222例输入学生五门课程的成绩,计算总分及平均分并显示。模块:
PublicMATHAsSinglePublicPHYSICSAsSinglePublicCHEMISTRYAsSinglePublicCHINESEAsSinglePublicENGLISHAsSingle2022年11月12日星期六兰州理工大学计算机与通信学院2236.启动时的快
速显示使用快速显示窗体模板的方法:“工程”——”添加窗体”——”新建”——”展示屏幕”——”打开”2022年11月12日星期六兰州理工大学计算机与通信学院2244.6高级控件⚫“工程”——”部件”ActiveX控件可插入对象ActiveX设计器ActiveX控件存放
在Windows的SYSTEM目录中,具有OCX扩展名2022年11月12日星期六兰州理工大学计算机与通信学院225⚫SSTab控件——页框(具有多个选项卡)在MicrosoftTabbedDialogControl6.0部件
中⚫ProgressBar控件——进度条在MicrosoftWindowsCommonControl6.0部件中⚫Slider控件——包含滑块和可选择性刻度标记的窗口属性:tickfrequency—决定控件上刻度的疏密。事件:scroll和change事件2022年11月12日星期六兰
州理工大学计算机与通信学院226⚫UpDown控件位于MicrosoftWindowsCommonControl-26.0部件中⚫将UpDown控件与其他控件关联的步骤是:(1)打开UpDown控件的属性
页(2)在合作者选项中输入合作者控件的名称和选定合作者控件的属性属性:increment--控件的实际增减值事件:downclick和upclick事件2022年11月12日星期六兰州理工大学计算机与通信学院227⚫Animation控件——显示无声的AVI视频✓位于MicrosoftWi
ndowsCommonControl-26.0部件中✓方法:openplaystopclose✓属性:centerautoplay2022年11月12日星期六兰州理工大学计算机与通信学院2284.7鼠标器和键盘一、鼠标器
:1.鼠标器事件:除了Click、DblClick外,还有三个:SubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)SubF
orm_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)SubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)注意:鼠标事件发生在什么对象
上,是窗体上还是控件上。当鼠标指针位于窗体中没有控件的区域时,窗体将识别鼠标事件。当鼠标指针位于某个控件上方时,该控件将识别鼠标事件。2022年11月12日星期六兰州理工大学计算机与通信学院229(1
)Button参数:指示按下或释放了哪个鼠标按钮。B2B1B0B0为1:按下了左键B1为1:按下了右键B2为1:按下了中键IfButton=1Then'或者IfButton=vbLeftButtonThen…'这是按了左健后执行的代码
…Endif使用符号常数:1—vbLeftButton:用户按下左键触发了鼠标事件;2—vbRightButton:用户按下右键触发了鼠标事件;4—vbMiddleButton:用户按下中键触发了鼠标事件。中右左2022年11月12日星期六兰州理工大学计算机与通信学院23
0(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(可能其它键也被按下了)。If
Shift=2andButton=1Then…‘这是仅按住Ctrl键单击鼠标后执行的代码…EndIfB2B1B0AltCtrlShift2022年11月12日星期六兰州理工大学计算机与通信学院231符号
常数:1—vbShiftMask2—vbCtrlMask4—vbAltMask(3)x,y:鼠标的当前位置,采用的坐标系是用ScaleMode属性指定的坐标系例显示鼠标器指针所指的位置例简单的画图程序。在窗体上按下鼠标右
键画圆,按下鼠标左键移动时画线。2022年11月12日星期六兰州理工大学计算机与通信学院232二、键盘事件:注意窗体和控件的键盘事件是有区别的。KeyPress事件过程:按下并释放一个会产生ASCII码的
键时被触发SubForm_KeyPress(KeyAsciiAsInteger)‘窗体的事件过程Subobject_KeyPress([indexAsInteger,]KeyAsciiAsInteger)‘控件的事件过程KeyDown事件过程:按下键盘上任意一个键时被触发SubF
orm_KeyDown(keycodeAsInteger,shiftAsInteger)Subobject_KeyDown([indexAsInteger,]keycodeAsInteger,shiftAsIntege
r)KeyUp事件过程:释放键盘上任意一个键时被触发SubForm_KeyUp(keycodeAsInteger,shiftAsInteger)Subobject_KeyUp([indexAsInteger,]keycodeAsIntege
r,shiftAsInteger)2022年11月12日星期六兰州理工大学计算机与通信学院2331、KeyPress事件:KeyPress事件只对会产生ASCII码的按键有反应,包括数字、大小写字母、空格、Enter、Tab、BackSpace、Esc及
标点符号等键。对于例如方向键、功能键(如F1,Alt,Shift,Ctrl)等的不会产生ASCII码的按键,KeyPress不会发生。2、KeyDown和KeyUp事件:当控制焦点在某个对象上,同时用户按下键盘上的任意
一个键,都会引发该对象的KeyDown事件,释放按键便触发KeyUp事件。KeyCode参数值是用户所操作的那个键的扫描代码,它告诉事件过程用户所操作的物理键。例如,不管键盘处于小写还是大写状态,用户在键盘按“A
”键,KeyCode参数值相同。对于有上档字符和下档字符的键,其KeyCode也是相同的,为下档字符的ASCII码。键(字符)KeyCodeKeyAscii“A”&H41&H41“a”&H41&H61“5”&H35&H35“%”&H35&H25“1”(大键盘上)&H31&H31“
1”(数字键盘上)&H61&H312022年11月12日星期六兰州理工大学计算机与通信学院234注意窗体和控件的键盘事件发生的顺序:默认情况下,当用户对当前具有控制焦点的控件进行键盘操作时,控件的三个键盘事件被触发,但窗体的三个键盘事件不会发生。为了
启用这三个事件,必须将窗体的KeyPreview属性设为True,而默认值为False。如果窗体的KeyPreview属性设置为True,则首先触发窗体的KeyPress、KeyUp、KeyDown事件,然后才触发控件的键盘
事件。也就是说,如果窗体的KeyPreview属性设为True,并且窗体级事件过程修改了KeyAscii变量的值,则当前具有焦点的控件的KeyPress事件过程将接收到修改后的值,如果窗体级事件过程将KeyAscii设置为0,则不再调用对象的KeyPress事件过程。2022年11月1
2日星期六兰州理工大学计算机与通信学院235窗体的:KeyPressKeyDownKeyUp控件的:KeyPressKeyDownKeyUp窗体的KeyPreview为True焦点在控件上输入SubForm_KeyPress(KeyAsciiAsInteger)KeyA
scii=KeyAscii+1EndSubSubText1_KeyPress(KeyAsciiAsInteger)KeyAscii=KeyAscii+1EndSub假定窗体KeyPreview为True,并有下面事件过程,则当文本框中输入“1”
时,实际上是得到的是“3”?窗体KeyPreview为False时在文本框中输入“1”时,实际上得到的是什么。在这里作一点修改影响所有控件在这里作一点修改影响一个控件2022年11月12日星期六兰州理工大学计算机与通信学院236利用这个特性可以对输入的数据进行验证、限制和修改1.修改输入数
据:将KeyPreview设置为True时,在窗体的如下KeyPress事件过程中将所有的字符都改成大写,则窗体上的所有控件接收到的都是大写字符。SubForm_KeyPress(KeyAsciiAsInteger)IfKeyAscii>=Asc("a")An
dKeyAscii<=Asc("z")ThenKeyAscii=KeyAscii+Asc("A")-Asc("a")EndIfEndSub2.限制数据输入:文本框只能接收“0”~“9”的数字字符。SubText1_KeyPress(KeyAscii
AsInteger)IfKeyAscii<48OrKeyAscii>57ThenKeyAscii=0EndIfEndSub2022年11月12日星期六兰州理工大学计算机与通信学院237例编写一个程序,当按下Alt+F5时终止程序的运行。(F5的KeyCode码为v
bKeyF5)‘先把窗体的KeyPreview设置为True,再编写如下的程序:SubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)'按下Alt键时,Shift的值为4If(KeyCode=vbKeyF5)And(Shift=4)ThenEnd
EndIfEndSub2022年11月12日星期六兰州理工大学计算机与通信学院238三、拖放:即将源对象“拖”到目标对象上“放”的操作。有两种模式:自动拖放手工拖放2022年11月12日星期六兰州理工大学计算机与通信学院2391.Drag
Mode属性1:自动拖动模式,源对象不再接收Click和MouseDown事件。0:(缺省),手工拖动模式,源对象接收Click和MouseDown事件2.DragIcon属性拖动过程中显示的图标(Ico或Cur文件)。lblE
xample1.DragIcon=LoadPicture("C:\Icons\Mail.ico")lblExample2.DragIcon=picIcon.Picture’用控件picIcon中的图形作为标签lblExample2被拖动时显示的图标3.Drag方法当DragMode为0
时,需用Drag方法启动拖放[控件名称.]Drag参数0:取消拖放操作1(省略):开始拖放操作2:结束拖放操作2022年11月12日星期六兰州理工大学计算机与通信学院2404、拖放事件:DragDrop、DragOver在这两种事件引发的同时,系统
自动将源对象作为Source参数传递给事件过程,可通过程序设计对源对象进行一些操作和判断,同时鼠标指针的位置及拖放过程的状态也将作为参数传递给事件过程,供程序识别和使用。在拖放事件过程中可以采用TypeOf函数判断源对象的控件类型,供程序识别。通过判断源对象的控件
类型,可对其进行属性设置和调用相应的方法进行操作。其形式如下:IfTypeOf对象变量Is控件类型then其中TypeOf函数的返回值为对象变量所引用控件的类型例:IfTypeOftext1istextboxthenmsgbox(“text”)endif2
022年11月12日星期六兰州理工大学计算机与通信学院2415.Parent属性◆所有控件均具有该属性。◆当控件作为数据传递给过程时,控件所在窗体也被传递到过程中,窗体的属性及方法可通过source.parent继承下来。如:source.parent.属性=设置值s
ource.parent.方法参数2022年11月12日星期六兰州理工大学计算机与通信学院242例拖放应用示例:将装有某个图形的图形框作为源对象拖放到窗体的某个地方,如果被拖到“取消拖放”标签上方,则取消拖放操作。例拖放应用示例:左边图像框采用手工拖动模式,标签采用自动拖动模式
。图像框只能用鼠标左键拖动,拖到右边的图像框后消失,而且拖动时图像框中的图标作为拖动图标使用。标签可以拖动,但拖到图像框后显示“Error”。2022年11月12日星期六兰州理工大学计算机与通信学院2434.7.4OLE拖放⚫将数据从一个控件或应用
程序中移动到另一个控件或应用程序中⚫OLEDragMode属性0——manual手动实现“拖”操作1——automatic自动实现“拖”操作⚫OLEDropMode属性0——none不接受“放”操作1——manual手动实现“放”操作2——automatic自动实现
“放”操作2022年11月12日星期六兰州理工大学计算机与通信学院244⚫例:將文本框的OLEDragMode属性设为1,OLEDropMode属性设为2,把文本框中的内容拖动到word等应用程序中2022年11月12日星期六兰州理工大学计算机与通信学院第五章文件5.1文件系统控件5.
2文件的读写2465.1文件系统控件SubDrive1_Change()Dir1.Path=Drive1.DriveEndSubSubDir1_Change()File1.Path=Dir1.PathEndSubPrivateSubForm_Load()Combo1.AddIt
em"*.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文件系统控件有三种,即驱动器、目录和文件列表框2022年11月12日星期六兰州理工大学计算机与通信学院2471.驱动器列表框Drive属性:[对象.]Drive[=drive]Ch
ange事件:重新设置Drive属性引发Change事件2.目录列表框Path属性:[对象.]Path[=pathname]Change事件:重新设置Path属性引发Change事件2022年11月12日星期六兰州理工大学计算机与通信学院2483.文件列表框Path属性:显示
该路径下的文件。重新设置Path属性引发PathChange事件。Pattern属性:显示的文件类型。[对象.]Pattern[=value]重新设置Pattern属性引发PatternChange事件。例如:File1.Pattern=
"*.frm",显示*.frm文件。多个文件类型用分号;分界。例如:"*.frm;*.frx"FileName属性:[对象.]FileName[=pathname]引用时只返回文件名,相当于File1.List(File1.ListIndex),需用
Path属性得到其路径;设置时可带路径。2022年11月12日星期六兰州理工大学计算机与通信学院249Click、DblClick事件:例如,单击输出文件名。SubFile1_Click()MsgBox
File1.FileNameEndSub例如,双击执行可执行程序SubFile1_DblClick()ChDirDir1.Path’改变当前目录RetVal=Shell(File1.FileName,1)’执行程序EndSub2022年11月1
2日星期六兰州理工大学计算机与通信学院250文件:存储在外部介质上数据的集合。按名存取。1.记录由若干个相互关联的数据项组成。例如,由学生的学习成绩信息组成的记录:学号姓名数学成绩语文成绩物理成绩总分数
据项2.文件及其种类文件:是记录的集合顺序访问模式:顺序文件。随机访问模式:随机文件,记录的长度相同二进制访问模式:二进制文件(可认为记录长度为1)5.2文件的读写2022年11月12日星期六兰州理工大学计算机与通信学院251(1)顺序文件按顺序依次
把记录写入文件;按顺序依次把记录读出来。文本文件:一行一条记录,记录可长可短,以“换行”字符为分隔符号。(2)随机文件随机文件可以直接访问文件中的任意一个记录。每个记录的长度是固定的,每个记录都有一个记录号
,按记录号进行存取。通常用来处理数据文件。根据记录号访问#1记录1#2记录2……#N记录N(3)二进制文件直接把二进制码存放在文件中。2022年11月12日星期六兰州理工大学计算机与通信学院2521.打开文件Op
en文件名[For模式]As[#]文件号[Len=记录长度](1)文件名:字符串常量,包括存储文件的驱动器名及路径(2)模式OUTPUT:写操作(从内存写入文件)INPUT:读操作(从文件读出到内存)APPEND:追加信息到文件未尾(3)文件号1~511,可以用Fr
eeFile函数获得下一个可利用的文件号。(4)记录长度小于或等于32767的整数,它指定数据缓冲区的大小。例如,打开C:\VB\SCORE,供写入数据,指定文件号为#1。OPEN"C:\VB\SCORE"FOROUTPUTAS#15.2.2顺序访问模式打开文件读出
或写入关闭文件2022年11月12日星期六兰州理工大学计算机与通信学院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"For
OutputAs#1Fori=1Tolen(Text1.text)Print#1,Mid(Text1,i,1);NextiClose#12022年11月12日星期六兰州理工大学计算机与通信学院254(2)Write#文件号,[输出列表]“输出列表”:一般是指用“,”分隔的数值或
字符串表达式。Write#的功能基本上与Print#语句相同,区别在于Write#是以紧凑格式存放,即在数据项之间插入“,”,并给字符串加上双引号。例如,命令:Write#1,"One","Two",123内容:“One”,“Two”,123(包括标点符号)3.关闭文件Cl
ose[[#]文件号][,[#]文件号]...例如,Close#1,#2,#3如果省略了文件号,Close命令将会关闭所有已经打开的文件。2022年11月12日星期六兰州理工大学计算机与通信学院2554.读顺序文件(1)INPUT#文件号,变量列表--
-----按数据项读从文件中读出数据,把读出的每个数据项分别存放到所对应的变量。为了能够用Input#将文件中的数据正确地读出,在将数据写入文件时,要使用Write#语句而不是用Print#语句。(2)LINEINPUT#文件号,字符串变量-------按行读读一行到变量中,主要用
来读取文本文件。读出的数据中不包含回车符及换行符。(3)INPUT$(读取字符数,#文件号)--------一次性读入该函数可以读取指定数目的字符。2022年11月12日星期六兰州理工大学计算机与通信学院2565.函数LO
F(文件号):返回文件的长度(总字节数)。如LOF(1)返回#1文件的长度,如果返回0值,则表示该文件是一个空文件。EOF(文件号):返回读写位置。指针在文件尾时,EOF函数为True,否则为False。➢对于顺序文件用EO
F函数测试是否到文件尾;➢对于随机文件和二进制文件,当最近一个执行的Get语句无法读到一个完整记录时返回True,否则返回False。2022年11月12日星期六兰州理工大学计算机与通信学院257例:读文本
文件到文本框假定文本框名称为Text1,文件名为MYFILE.TXT。方法1:一行一行读Text1.Text=""Open"MYFILE.TXT"ForInputAs#1DoWhileNotEOF(1)LineInput#1,InputDataText1.Text=Tex
t1.Text+InputData+vbCrLfLoopClose#12022年11月12日星期六兰州理工大学计算机与通信学院258方法2:一次性读Text1.Text=""Open"MYFILE.TXT"ForInputAs#1Text1.Text=Input$(LOF(1),1)Close#1
方法3:一个个字符读DimInputDataasString*1Text1.Text=""Open"MYFILE.TXT"ForInputAs#1DoWhileNotEOF(1)InputData=Input$(1,#1)Text1.Text=Text1.Text+Inp
utDataLoopClose#12022年11月12日星期六兰州理工大学计算机与通信学院259例文件加密程序PrivateSubFile1_DblClick()OpentfilenameForInputAs#1Text1.Text=""D
oWhileNotEOF(1)indata=Input(1,#1)Text1.Text=Text1.Text+indataLoopEndSubCommonDialog1.Action=2OpenCommonDialog1.Fi
leNameForOutputAs#1Fori=1ToLen(Text1.Text)Print#1,Mid(Text1.Text,i,1);NextiClose#12022年11月12日星期六兰州理工大学计算机与通信学院2605.4随机文件1、打
开Open文件名ForRandomAs#文件号[Len=记录长度]文件以随机访问模式打开后,可以同时进行写入与读出操作。记录长度缺省值是128个字节。2、写操作Put[#]文件号,[记录号],变量名将一个记录变量的内容写到指定的记录位置处。忽略记录号,则表示
在当前记录后的位置插入一条记录。3、读操作Get[#]文件号,[记录号],变量名将记录号指定的记录内容读入记录变量中忽略记录号,则读出当前记录后的那一条记录。4、关闭文件Close2022年11月12日星
期六兰州理工大学计算机与通信学院261例学生信息管理程序。追加记录(Command1):将一个学生的信息作为一条记录添加到随机文件末尾。显示记录(cmdDisplay):显示文本框(text4)中指定的记录。2022
年11月12日星期六兰州理工大学计算机与通信学院2625.5常用的文件操作语句和函数1.FileCopy语句格式:FileCopysource,destination功能:复制一个文件。说明:FileCopy语句不能复制一个已打开的文件。2.Kill语句格式:K
illpathname功能:删除文件。说明:pathname中可以使用统配符“*”和“?”。例如:Kill"*.TXT"3.Name语句格式:NameoldpathnameAsnewpathname功
能:重新命名一个文件或目录。说明:(1)Name具有移动文件的功能。(2)不能使用统配符“*”和“?”,不能对一个已打开的文件上使用Name语句。2022年11月12日星期六兰州理工大学计算机与通信学院26
34.ChDrive语句格式:ChDrivedrive功能:改变当前驱动器。说明:如果drive为“”,则当前驱动器将不会改变;如果drive中有多个字符,则ChDrive只会使用首字母。5.MkDir语句格式:MkDirpa
th功能:创建一个新的目录。6.ChDir语句格式:ChDirpath功能:改变当前目录。例如:ChDir"D:\TMP"7.RmDir语句格式:RmDirpath功能:删除一个存在的目录。说明:只能删除空目
录。2022年11月12日星期六兰州理工大学计算机与通信学院2648.CurDir函数格式:CurDir[(drive)]功能:利用CurDir函数可以确定任何一个驱动器的当前目录。说明:drive为“”,则CurDir返回当前驱动器的当前
目录。例利用ChDrive和ChDir语句改写File1_DblClick()事件过程。SubFile1_DblClick()ChDriveDrive1.Drive'设置缺省驱动器ChDirFile1.Path'设置缺省目录RetVal=Shell(File1.FileName,1)E
ndSub2022年11月12日星期六兰州理工大学计算机与通信学院265例添加事件过程File1_MouseDown(),使之支持Del键,即按下Del键删除选定的文件。SubFile1_KeyDown(Ke
yCodeAsInteger,ShiftAsInteger)IfKeyCode=vbKeyDeleteThenChDriveDrive1.DriveChDirFile1.PathKillFile1.FileNameFil
e1.Refresh'文件删除后更新文件列表框EndIfEndSub2022年11月12日星期六兰州理工大学计算机与通信学院266第二章Vb简单的程序设计(4学时)2.1程序设计方法的发展2.2VB中
的有关概念2.3建立简单的应用程序2.4基本控件和属性2.5工程的管理及环境的设置2.6生成可执行文件和制作安装盘2.7程序调试2.8常见错误2022年11月12日星期六兰州理工大学计算机与通信学院2672.1程序设计方法的发展1.初期的程序设计高运行效率、少占用内存为目标2.结构化程序设
计程序的可读性、可维护性为目标程序=算法+数据结构的面向过程的程序设计3.面向对象的程序设计降低程序的复杂性、提高软件的开法效率和改善工作界面为目标程序=对象+消息的面向对象的程序设计2022年11月12日星期六兰州理工大学计算机与通信学院2682.2对象
的有关概念1.类类是创建对象实例的模板,包含了创建对象的属性描述和行为特征的定义.2.对象是类的一个实例,继承了类的属性、方法。Vb中常用的对象有:窗体、控件等。3.对象的建立和命名4.对象的三要素(1)属性对象的性质,即用来描述
和反映对象特征的参数。(2)方法对象的行为,即将一些通用的过程编写好并封装起来,作为方法供用户直接调用。2022年11月12日星期六兰州理工大学计算机与通信学院269(3)事件响应对象的动作称为事件,它发生在用户与应用程序交互时。如单击控件、鼠标移动、键盘按下等。
•事件过程指附在该对象上的用户编写的程序代码,是事件的处理程序。•事件驱动过程是图形用户界面的本质,由用户控制而代码作出响应。5.VB程序的执行步骤如下:(1)启动应用程序,装载和显示窗体(2)窗体(或窗体上的控件)等待事件的发生;(3)事件发生时,执行对应的事件过程;(4)重复执行步骤
(2)和(3);(5)直到遇到“END”结束语句结束程序的运行或按“结束”强行停止程序的运行。2022年11月12日星期六兰州理工大学计算机与通信学院2702.3建立简单的应用程序以例2.1为例1.建立用户界面的对象2.对象属性的设置3.对象事件过程及编程4.程序运行和调试5.保存文件2022年1
1月12日星期六兰州理工大学计算机与通信学院2712.4基本控件和窗体一.常用属性1.Name名称属性创建的对象名称,有默认的名.在程序中,控件名是作为对象的标识而引用,不会显示在窗体上。2.Caption标题属性该属性决定了控件上显示的内容。3.Height、wi
dth、top和left属性LeftTopHeightWidth2022年11月12日星期六兰州理工大学计算机与通信学院2724.Enabled属性控件是否可操作.当设置为false时,呈暗淡色,禁止用户进行操作.5.Visible属性控件是否可见.当设置为false时,用户看不到,但
控件本身存在。6.Font属性Fontname字体Fontsize字体大小Fontbold是否是粗体Fontitalic是否斜体Fontstrikethru是否加一删除线Fontunderline是否带下划线例2.2在窗体是建立两个命令按钮Command1和Co
mmand2,Command2的Font通过属性窗口设置,其余属性通过代码实现。2022年11月12日星期六兰州理工大学计算机与通信学院2737.Forecolor前景颜色属性设置控件的前景颜色(即正文颜色).
其值是一个16进制常数,用户可以在调色板中直接选择所需颜色。8.Backcolor背景颜色属性9.Backstyle背景风格属性0-transparent:透明显示,即控件背景颜色显示不出来10.BorderStyle边框风格属性0-None:控件周围没有边框1-FixedSingl
e:控件带有单边框。11.Alignment属性控件上正文水平对齐方式0:正文左对齐1:右对齐2:居中12.AutoSize属性控件是否根据正文自动调整大小,False.13.WordWarp属性AutoSizeTr
ue时,WordWarp才有效按正文字体大小在垂直方向上改变显示区域的大小。2022年11月12日星期六兰州理工大学计算机与通信学院27414.TabIndex属性决定了按Tab键时,焦点在各个控件移动的顺
序。各个控件默认TabIndex值就是以控件建立时的顺序,第一个为0.15.控件默认属性反映该控件最重要的属性,使用时可省略属性名。.注意:Command的默认属性为Default,当该属性为True,当按Enter键,
该控件起作用。例2.3控件设置效果默认控件名Name标题Caption有关属性设置Form1颜色、对齐、鼠标属性例MousePointer=99,MouseIcon=Key04.icoLabel1左对齐Alignment=0,BorderS
tyle=1Label2居中Alignment=1,BorderStyle=1Label3自动AutoSize=True,WordWarp=False,BorderStyle=1Label4背景白BackColor=&H00FFFFFF&,
BorderStyle=0Label5前景红ForeColor=&H000000FF&,BorderStyle=02022年11月12日星期六兰州理工大学计算机与通信学院275标题图标控制菜单框最小化按钮最小化按钮
边框样式二.窗体1.属性Caption标题MaxButton、MinButtonIcon、ControlBoxPicture、AutoRedrawBorderStyle(012345)WindowsState(0-正常、1-最小化、2-最大化)2
.事件Click、DblClick和LoadLoad当装入窗体时激发,通常用于对属性和变量初始化3.方法Print、Cls和Move等例2.4上述属性、Click、DblClick和Load事件演示。2022年11月12日星期六兰州理工大学计算机与通信学院276三.标签Label用于显示文本(
输出)信息,不能作为输入信息的界面。例2.5.显示浮雕效果的文字,实现方法:字颜色、标签位置四.文本框TextBox是一个文本编辑区域,可在该区域输入,编辑和显示正文内容。1.其他属性•Text:正文内容•Maxlength:设置正文的最多字符个数,0任意长
度值.,•MultiLine:是否为多行,默认一行.FALSE•ScrollBars:当MultiLine为True时,该属性才有效,表示滚动条的形式0-None、1-Horizontal、2-Vertical、3-Bo
th。•Locked:是否可被编辑属性,False,表示为可编辑。•PassWord:口令字符.Text属性返回输入的数据,屏幕显示该字符,•SelStart,SelLength,SelText:选中文本的起始、长度、内容。例2.6复制选中
的文本2022年11月12日星期六兰州理工大学计算机与通信学院2772.常用事件•Change:当改变文本框的Text属性时会引发该事件.•KeyPress(KeyAsciiAsInteger):同上
,并可返回一个KeyAscii参数KeyAscii为13,按回车键;为0去除刚输入的字符.•LostFocus:当控件失去焦点时发生.•GotFocus:当控件获得焦点时发生.3.常用方法[对象.]SetFocus:
是把光标移到指定的文本框对象中。4.文本框的应用数据过滤例2.7要求输入合法的数字数据。当输入结束时(按Tab键),对于输入正确的数据,显示正确信息;对输入的非数字数据,则响铃(Beep)、显示错误信息、清除文本框中的内容,并使焦点重新回到文本框。•Text2_LostFocus当输入结束按Tab
键时,该事件激发•IsNumeric(Text2):判断是否输入非数字数据.•Text2.SetFocus:使焦点重新回到文本框2022年11月12日星期六兰州理工大学计算机与通信学院278五.命令按钮CommandButton接受用户输入的命令.输入命令可以有三种方式:鼠标
单击Tab键焦点到该按钮快捷键1.其他属性•Caption:命令按钮显示的内容,可设置快捷键,例&Ok,显示Ok•Value:检查该按钮是否按下.该属性在设计时无效.•Picture:按钮可显示图片文件(.bmp和.Ico),当
Style为1时有效•Style:确定显示的形式.0只能显示文字,1文字、图形均可。•ToolTipText:设置工具提示,和Picture结合使用。2.事件Click2022年11月12日星期六兰州理工大学计算机与通信学院2793.例2.8建
立一个允许剪切、复制和粘贴的简单便笺板程序。增加内容:利用MouseMove事件决定命令按钮的有效性,即当选中内容,“剪切”、“复制”按钮有效,否则无效。2022年11月12日星期六兰州理工大学计算机与
通信学院280六常用方法方法是面向对象的,故使用的形式为:[对象.]方法1.Print方法形式:[对象.]Print[{Spc(n)|Tab(n)}][表达式列表][;|,]作用:在对象上输出信息对象:窗体、图形框或打印机(Printer),省略对象在窗体上输出。S
pc(n)函数:插入n个空格,允许重复使用。Tab(n)函数:左端开始右移动n列,允许重复使用。;(分号):光标定位上一个显示的字符后。,(逗号):光标定位在下一个打印区的开始位置处。无;,换行。开始打印的位置是由对象
的CurrentX和CurrentX属性决定,缺省为打印对象的左上角0,0。注意:Print方法在Form_Load事件过程中起作用,必须设置窗体的AutoRedraw为True。2022年11月12日星期六兰州理工大学计算
机与通信学院281例2.9显示图形PrivateSubForm_Click()Fori=1To5PrintTab(i);String(6-I,"▼");Spc(6);String(I,"▲")NextiEndSub考虑:若把Spc(
6)换成Tab(6),效果如何?2022年11月12日星期六兰州理工大学计算机与通信学院2822.Cls方法形式:[对象.]Cls作用:清除运行时在窗体或图形框中显示的文本或图形。注意:不清除在设计时的文本和图
形。3.Move方法形式:[对象.]Move左边距离[,上边距离[,宽度[,高度]]]作用:移动窗体或控件,并可改变其大小。对象:可以是窗体及除时钟、菜单外的所有控件例2.10图形起始点(左上角)移到窗体的中心,同时图形缩小50%。2022年11月12日星期六兰州理工大
学计算机与通信学院283五.应用举例例2-11编一计算月支付贷款的程序。现要求根据房产商提供的信息,买房者选择房型、面积、单价、按揭期等信息,计算每月支付代款的程序。第一个窗体:列表框选择数据、标签显示数据
、文本框输入数据;第二个窗体:图形框显示房屋的平面图。Pmt函数计算月支付贷款2022年11月12日星期六兰州理工大学计算机与通信学院2842.5工程的管理及环境的设置一.工程的组成工程文件包含了一个应用程序的所有文件:•窗体文件(.
frm):控件及属性、事件过程和自定义过程•窗体的二进制数据文件(.frx),自动产生同名.frx文件。•标准模块文件(.bas)•类模块的文件(.cls)•资源文件(.res)•ActiveX控件的文件(.ocx)二.创建、打开和保存工程
2022年11月12日星期六兰州理工大学计算机与通信学院285三.添加、删除和保存文件注意:1.窗体名和窗体文件名概念,窗体名:窗体的Name属性,在代码中用来引用该窗体,同一工程不能有相同的窗体名;窗体文件名:窗体存放
在磁盘上的文件名,该文件包含了该窗体的所有控件属性和代码,同一文件夹不能有相同的文件名。2.在工程中添加现存的窗体时,只是对该窗体文件的引用纳入工程。因此,如果更改窗体并保存它,会影响包含此窗体文件的任何工程。
3.在工程中删除窗体时,仅将此窗体从工程里删除掉,但是窗体文件仍存在于磁盘上。但是,如果在VB之外删除一个窗体文件,VB不能更新此工程文件,当打开此工程时,将显示一个文件丢失的错误信息。4.对窗体文件改名方法二:1).打开工程
“另存为…Form”实现文件的复制保存工程文件2).利用编辑程序打开工程文件,修改FORM=XXX的文件名窗体文件名窗体名2022年11月12日星期六兰州理工大学计算机与通信学院2862.6生成可执行文件和制作安装盘以工程文件例2.11为例1.生成可执行文
件文件/生成V6B2-11.exe文件,然后关闭VisualBasic6.0。2.制作安装盘•运行VB6.0中文版工具“Package&Deployment”,在向导的指导下:•“打包”:把工程中用到的各种
类型的文件进行打包压缩后,存放到特定的目录下。•“展开”:再把这些打包的文件展开到用户可以携带的安装介质软盘、光盘等。3.检测安装程序在没有VB6.0系统的环境下,执行安装盘中的Setup.exe文件,
将发行盘进行安装。2022年11月12日星期六兰州理工大学计算机与通信学院2872.7程序调试.错误类型(1)编辑错误在编辑代码时,VB会对键入的代码直接进行语法检查。当发现代码存在打字错误,遗漏关键字或标点符等语法错误,VB在Form窗
口中弹出一个子窗口,提示出错信息,出错的那一行变成红色。这时,用户必须单击“确定”按钮,关闭出错提示窗,然后对出错行进行修改。2022年11月12日星期六兰州理工大学计算机与通信学院288(2)编译错误编译错误指按了“启动”按钮,VB开始运行程序前,先编译执行的程序段时,产生的错误。此类错误由于用
户未定义变量、遗漏关键字等原因产生。这时,VisualBasic也弹出一个子窗口,提示出错信息,出错的那一行被高亮度显示。2022年11月12日星期六兰州理工大学计算机与通信学院289(3)运行错误运行时错误指VB在编译通过后,运行代码时发生的错误。这类错误往往是
指令代码执行了一非法操作引起的。例如类型不匹配、试图打开一个不存在的文件等。2022年11月12日星期六兰州理工大学计算机与通信学院290(4)逻辑错误程序运行后,得不到所期望的结果,这说明程序存在逻辑错误。这类错误往往是程序存在逻辑上的缺陷所引起。例如,运算
符使用不正确、语句的次序不对、循环语句的起始、终值不正确等。通常,逻辑错误不会产生错误提示信息,故错误较难排除,需要程序员仔细地阅读分析程序以及调试。2022年11月12日星期六兰州理工大学计算机与通信学院2912调试错误(1)VB的三种模式•设计模式
[设计]进行程序的界面设计、属性设置、代码编写等。•运行模式[运行]执行“运行/启动”命令,可以查看程序代码,但不能修改。•中断模式[中断]当在运行模式,按了“中断”命令或当程序出现运行时错误时进入中断模式。可以查看代码、修改代码、检查数据。(2)调试窗口有三个调试窗口,它们是:“立
即”窗口、“监视”窗口、和“本地”窗口。可单击视图菜单中的对应命令打开这些窗口。2022年11月12日星期六兰州理工大学计算机与通信学院292(3)设置断点和逐语句跟踪断点是告诉VB挂起程序执行的一个标记,当程序执行到断点处即暂停程序的运行,进入中断模式。
设置或删除断点的步骤:中断模式下,直接查看某个变量的值,只要把鼠标指向所关心的变量处,稍停一下,就在鼠标下方显示该变量的值。断点标记当前行2022年11月12日星期六兰州理工大学计算机与通信学院2932.8常见错误1.使用中文标点符号系统产生“无效字符”,以红色显示2.字母和数
字形状相似小写字母“l”和数字“1”形式相同、小写字母“o”与数字“0”。3.对象名称(Name)属性写错Text1、Text2、Command1txtInput、txtOutput、cmdOk4.对象的属性名、方法名、标准函数名写错尽量使用自动列出成员
功能。正确的系统按规定的大小写表示。5.无意形成控件数组建立控件时小心使用“复制”、“粘贴”按钮6.打开工程时找不到对应的文件保存文件时先保存窗体.frm文件、再保存.vbp文件,注意路径。2022年11月12日星
期六兰州理工大学计算机与通信学院294第三章VB语言基础(2学时)3.1编码规则3.2数据类型3.3变量与常量3.4运算符和表达式3.5常用函数3.6常见错误2022年11月12日星期六兰州理工大学计算机与通信学院2953.1编码基础1.V
B代码不区分字母的大小写系统保留字自动转换每个单词的首字母大写用户自定义行以第一次为准2.语句书写自由一行可书写几句语句,之间用冒号分隔;一句语句可分若干行书写,用续行符连接_一行<=255个字符3.注释有利于程序的维护和调试Rem开始或单撇‘4.
保留行号与标号.2022年11月12日星期六兰州理工大学计算机与通信学院2963.2数据类型标准数据类型2022年11月12日星期六兰州理工大学计算机与通信学院2973.3变量与常量一.变量和常量的命名规则变量:在程序运行中其存
储的值可以改变。常量:在程序运行中其值不可以改变。命名规则:1.以字母或汉字开头,后可跟汉字、字母、数字或下划线组成,长度小于等于255个字符;2.不要使用VB中的关键字;3.VB中不区分变量名的大小写.4.为了增加程序的可读性,可在
变量名前加一个缩写的前缀来表明该变量的数据类型。2022年11月12日星期六兰州理工大学计算机与通信学院298二.变量声明1.用Dim语句显式声明变量形式:Dim变量名[AS类型]Dim变量名类型符例DimiCountAsinteger,sAllsumAssi
ngle等价于DimiCount%,sAllsum!2.隐式声明未进行上述的声明而直接使用,其类型为Variant类型建议不使用.注意:在通用声明处加OptionExplicit语句来强制显式声明变量。2022年11月12日星期六兰州理工大学计算机与
通信学院299三.常量1.用户声明常量形式:Const常量名[AS类型]=表达式省略[AS类型],常量的类型由表达式值的类型决定为使与变量名区分,一般常量名使用大写字母例ConstMAX=1002.系统提供的常量系统定义
常量位于对象库中,可通过“对象浏览器”查看.例:vbNormalvbMinimized、vbbCrLf等2022年11月12日星期六兰州理工大学计算机与通信学院3003.4运算符和表达式一.运算符1.算术运算符例:5+10mod10\
9/3+2^2结果:102022年11月12日星期六兰州理工大学计算机与通信学院3012.字符串运算符&、+字符串连接"123"+"456"结果"123456""123"&"456"结果"123456"区别:+两边必须是字符串,&不一定例如:"abcdef
"+12345'出错"abcdef"&12345'结果为"abcdef12345""123"+456'结果为579"123"&456'结果为"123456"2022年11月12日星期六兰州理工大学计算机与
通信学院3023.关系运算符将两个操作数进行大小比较,结果为逻辑量。字符串比较,则按字符的ASCII码值从左到右一一比较,直到出现不同的字符为止.。例:"ABCDE">"ABRA"结果为False"男字">"女字"按汉字
的拼音字母比较2022年11月12日星期六兰州理工大学计算机与通信学院3034.逻辑运算符将操作数进行逻辑运算,结果是逻辑值条件表达式1And条件表达式2条件表达式均为T结果为T条件表达式1Or条件表达式2条件表达式有一个T结果为T2022年11月12日星期六兰州理工大学计算机与通信学院304二.
表达式1.组成变量、常量、函数、运算符和圆括号2.书写规则(1)运算符不能相邻。例a+-b是错误的。(2)乘号不能省略。例x乘以y应写成:x*y(3)括号必须成对出现,均使用圆括号。(4)表达式从左到右在同一基准上书写,无高低、大小。3.不同
数据类型的转换运算结果的数据类型向精度高的数据类型靠.Integer<Long<Single<Double<Currency4.优先级算术运算符>=字符运算符>关系运算符>逻辑运算2022年11月12日星期六兰州
理工大学计算机与通信学院305例:用人单位招聘秘书:年龄小于40岁,女性,学历专科或本科年龄<40性别=“女”(学历=“专科”学历=“本科”)AndAndOr考虑:若分别写成:年龄<40And性别=“女”And(学历=“专科”A
nd学历=“本科”)年龄<40Or性别=“女”Or(学历=“专科”Or学历=“本科”)例:表示算术表达式:正确的VB表达式:3〈=xAndx<=7错误的VB表达式:3<=x<=7或3<=xOrx<=773x
比a小,比b大用Ora小数b大数a小数b大数比a大,比b小用And2022年11月12日星期六兰州理工大学计算机与通信学院3063.5常用内部函数1.数学函数Rnd函数返回0和1(包括0但不包括1)之间的双精度随机数.每次运行时,要产生不同序列
的随机数,执行Randomize语句.例产生1-100的随机数:Int(Rnd*100)+12.转换函数Chr(66)“B“Asc(“B")66Asc(Chr(99))99Chr(Asc(“K”))“K”Ucase$("abcde
fg")“ABCDEFG"3.日期函数Time返回系统时间Date返回系统日期DateAdd(要增减日期形式,增减量,要增减的日期变量)DateDiff(要间隔日期形式,日期1,日期2)例如求两个时间相差的秒数:DateDiff(”s”,#19:3:23#,#19:5:1#)结果为982022年1
1月12日星期六兰州理工大学计算机与通信学院3074.字符串编码和函数(1)字符串编码Windows系统对字符采用了DBCS编码,中文2字节,西文1字节VB中字符Unicode编码,任何字符2字节.Len(“中国good”)为6LenB(“中国good”)为12StrConv()进行DBC
S与Unicode之间转换.(2)字符串函数Mid$("ABCDEFG",2,3)"BCD"InStr(2,"ABCDEFG","EF")5S=Split("123,56,ab",",")Join(S,"")"12356ab"Replace("ABCDABCD","CD
","123")“AB123AB123”S(0)="123",S(1)="56",S(2)="ab"2022年11月12日星期六兰州理工大学计算机与通信学院3085.格式输出函数例3.1利用Format函数显示有关的日期和时间。Form_CLIC
K()效果FontSize=12MyTime=#9:21:30PM#MyDate=#7/21/97#PrintFormat(MyDate,"m/d/yy")PrintFormat(MyDate,"mmmm-yy")PrintFormat(MyTime,"h-m-
sAM/PM")PrintFormat(MyTime,"hh:mm:ssA/P")'显示系统当前日期和时间PrintFormat(Now,"yyyy年m月dd日hh:mm")'以系统预定义的格式显示系统当前时间PrintFormat(Date,"dddd,mmmm,dd,yyyy")EndS
ub2022年11月12日星期六兰州理工大学计算机与通信学院3096.Shell函数能在DOS下或Windows下运行的应用程序,也可以在VB中调用.形式:Shell(命令字符串,窗口类型)窗口类型值为1表示正常窗口,缺省窗口最小化为图标。i=Shel
l("c:\windows\calc.exe")j=Shell("c:\command.com",1)2022年11月12日星期六兰州理工大学计算机与通信学院3103.6常见错误1.逻辑表达式书写错,在VB没有造成语法错而形成逻辑
错例数学表达式3≤x<10VB表达式为3<=x<10问题在于VB中的逻辑量与数值量可互转2.同时给多个变量赋值,在VB没有造成语法错而形成逻辑错例:Dimx%,y%,z%x=y=z=13.标准函数名写错4.变量名写错检查方法:在通用声明段加OptionExplicit5.语句书写位置错在通用
声明段只能有Dim语句,不能有赋值等其它语句2022年11月12日星期六兰州理工大学计算机与通信学院311第四章基本的控制结构(8学时)4.1顺序结构4.2选择结构4.3循环结构4.4其它辅助控制语句4.5常用算法(一)4.6常见错误(顺序、条件、循环)2022年11月12
日星期六兰州理工大学计算机与通信学院312一.赋值语句形式:[LET]变量名=表达式作用:将表达式的值赋值给变量名.一般用于给变量赋值或对控件设定属性值.例:sRate!=0.1Text1.Text="欢迎使用VisualBasic6.0”当表达式的类型与变量的类型不一
致时,强制转换成左边的精度iA%=10/3iA中的结果为3注意:虽然赋值号与关系运算符等于号都用“=”表示,VB系统会根据所处的位置自动判断是何种意义的符号。2022年11月12日星期六兰州理工大学计算机与通信学院313二.与用户交互
函数和过程1.InputBox函数InputBox(提示[,标题][,缺省][,x坐标位置][,y坐标位置])其中:提示提示信息,标题对话框标题,缺省输入区缺省值函数返回字符类型.例要在屏幕上显示如下的
对话框:DimstrNameAsString*40,strS1AsString*40相应的语句如下:strName=InputBox(“请输入你的姓名”+vbCrLf+“然后单击确定”,“输入框”)也可以:st
rS1=“请输入你的姓名”+Chr(13)+Chr(10)+“然后单击确定”strName=InputBox(strS1,“输入框”,,100,100)当键盘输入“王晓明”后,变量strName获得键盘输入的值.2022年11月12日星期六兰州理工大学计算机与通信学院3
142.MsgBox函数和MsgBox过程函数形式:变量[%]=MsgBox(提示[,按钮][,标题])过程形式:MsgBox提示[,按钮][,标题]按钮值如下:函数返回所选按钮整数值:2022年11
月12日星期六兰州理工大学计算机与通信学院315例3.2编一帐号和密码检验程序。要求:帐号不超过6位数字,有错,清除原内容再输入.密码输入时在屏幕上以“*”代替;若密码错,显示有关信息,选择“重试”按钮,清除原内容再输入,选择“取消”按钮,停止运行。分析:帐号
6位,MaxLength为6,LostFocus判断数字IsNumeric函数密码PassWordChar为“*”,MsgBox函数设置密码错对话框.2022年11月12日星期六兰州理工大学计算机与通信学院316常见错误数据合
法性检查中引起程序的死循环PrivateSubText1_LostFocus()IfNotIsNumeric(Text1)ThenText1=""Text1.SetFocusEndIfEndSubPrivateSubText2_LostFocus()IfNotIsNumeric(Text2)The
nText2=""Text1.SetFocusEndIfEndSubIfText2<>""AndNotIsNumeric(Text2Text1Text2Text1确定2022年11月12日星期六兰州理工大学计算机与
通信学院317三.选择结构1.If…Then语句(单分支结构)If<表达式>Then语句块EndIf或If<表达式>Then<语句>例:已知两个数x和y,比较它们的大小,使得x大于y.Ifx<yThent=xx=yy=tEndIf或Ifx<yThent=x:x=
y:y=t重要的是学会两个数的交换,若上述语句次序变一下,结果如何?表达式语句块TF图1-3-7单分支结构tyx图1-3-8两个数交换过程2022年11月12日星期六兰州理工大学计算机与通信学院3182.If…Then…Else
语句(双分支结构)If<表达式>Then<语句块1>Else<语句块2>EndIfIf<表达式>Then<语句1>Else<语句2>计算分段函数表达式F图1-3-9双分支结构语句块1T语句块2yxxxxxxx=+
+−+=sincos231030单分支结构实现:y=cos(x)-x^3+3*xIfx<>0Theny=sin(x)+sqrt(x*x+1)双分支结构实现:Ifx<>0Theny=sin(x)+sqrt(x*x+1)Elsey=cos(
x)-x^3+3*xEndIf2022年11月12日星期六兰州理工大学计算机与通信学院3193.If…Then…ElseIf语句(多分支结构)形式:If<表达式1>Then<语句块1>ElseIf<表达式2>Then<语句块2>…[Else语句块n+1]EndIf不管有几个分支,依次判
断,当某条件满足,执行相应的语句块,其余分支不再执行;若条件都不满足,且有Else子句,则执行该语句块,否则什么也不执行。.ElseIf不能写成ElseIf。表达式1表达式2表达式nTFTF图1-3-10多
分支结构语句块n语句块n+1语句块2语句块1F…T2022年11月12日星期六兰州理工大学计算机与通信学院320例已知百分制成绩mark,显示对应的五级制成绩哪些正确,哪些错误?方法一Ifmark>=90ThenPrint"优"ElseIfmark>=80ThenPrint"良"El
seIfmark>=70ThenPrint"中"ElseIfmark>=60ThenPrint"及格"ElsePrint"不及格"EndIf方法二Ifmark<60ThenPrint"不及格"ElseIfmark<70Th
enPrint"及格"ElseIfmark<80ThenPrint"中"ElseIfmark<90ThenPrint"良"ElsePrint"优"EndIf方法三Ifmark>=60ThenPrint"及格
"ElseIfmark>=70ThenPrint"中"ElseIfmark>=80ThenPrint"良"ElseIfmark>=90ThenPrint"优"ElsePrint"不及格"EndIf2022年11月12日星期六兰州理工大学计算机与通信学院3214.If语句的嵌套If语句的嵌
套是指If或Else后面的语句块中又包含If语句。形式如下:If<表达式1>ThenIf<表达式11>Then…EndIf…EndIf例:已知x,y,z三个数,使得x>y>z。用一个IF语句和一个嵌套的IF语句实现:Ifx<yThent=x:x=y:y=tIfy<z
Thent=y:y=z:z=tIfx<yThent=x:x=y:y=tEndIfEndIfIf语句的嵌套注意事项:书写锯齿型;If与EndIf配对。Tx>yTz为最小数T使得x>yFFFx>y>zx<yx与y交换y<zy与z交换x<yx与y交换2022年11月12日星期六兰州理工大学计算机与通
信学院3225.SelectCase语句(情况语句)形式:SelectCase变量或表达式Case表达式列表1语句块1Case表达式列表2语句块2…[CaseElse语句块n+1]EndSelect<表达式列表>:与<变量或表达式>同类型的下面四种形式之一:表达式例:“A”一组枚举表达式(用逗
号分隔)2,4,6,8表达式1To表达式260To100Is关系运算符表达式Is<60数值型或字符串表达式2022年11月12日星期六兰州理工大学计算机与通信学院323例如:已知变量strC中存放了一个字符,判断该字符是字母字符、数字字符还是其他字符。用多分支结构
实现:IfUcase(strC)>="A"AndUcase(strC)<="Z"ThenPrintstrC+"是字母字符"ElseIfstrC>="0"AndstrC<="9"ThenPrintstrC+"是数字字符"ElsePrintstrC+"其他字符"EndIf用Sele
ctCase语句实现:SelectCasestrCCase"a"To"z","A"To"Z"PrintstrC+"是字母字符"Case"0"To"9"PrintstrC+"是数字字符"CaseElsePrintstrC+"其他字符"EndSelect2022年11月12日星期六兰州
理工大学计算机与通信学院324例输入百分制成绩mark,显示对应的五级制成绩方法一方法二方法三SelectCasemarkSelectCasemarkSelectCasemarkCasemark>=90CaseIs>=90CaseIs>=90Print"优"Print"优"Print"优"C
asemark>=80CaseIs>=80Case80To89Print"良"Print"良"Print"良"Casemark>=70CaseIs>=70Case70To79Print"中"Print"中"Print"中"Casemark>=60CaseIs>=60Case60To69Pr
int"及格"Print"及格"Print"及格"CaseElseCaseElseCaseElsePrint"不及格"Print"不及格"Print"不及格"EndSelectEndSelectEndSelect哪些能实现,哪些不能实现?2022年11月12日星期六兰州
理工大学计算机与通信学院325例实验3.6对三门课程奖学金的判断,一等奖获得:SelectCasemark1,mark2,mark3Case(mark1+mark2+mark3)/3>=95Print"一等奖"Casemark1=100Andmark2=100
Andmark2>=80……EndSelect错误注意:SelectCase后不能出现多个变量;Case后不能出现变量及有关运算符。2022年11月12日星期六兰州理工大学计算机与通信学院326例3.3由计算机
来当一年级的算术老师,要求给出一系列的1~10的操作数和运算符,学生输入该题的答案,计算机根据学生的答案判断正确与否,当结束时给出成绩。分析:产生1~10操作数,可通过Int(10*Rnd+1)实现设置的控件名Label1Text1Picture1Command12022年11月
12日星期六兰州理工大学计算机与通信学院3276.条件函数(1)IIf函数形式是:IIf(表达式,当表达式为True时的值,当表达式为False时的值)例如:求x,y中大的数,放入Tmax变量中,语句如下,Tmax
=IIf(x>y,x,y)(2)Choose函数形式是:Choose(数字类型变量,值为1的返回值,值为2的返回值……)例如:Nop是1-4的值,转换成+、-、×、÷运算符的语句如下,Op=Choose(Nop,"+","-","×","÷")当值为1,返回字符串“+”,然后放
入Op变量中,值为2,返回字符串“-”,依次类推;当Nop是1-4的非整数,系统自动取Nop的整数办法在判断;若Nop不在1-4之间,函数返回Null值。(3)Switch函数形式是:Switch(条件表达式1,条件表达式1为True时的值[,条件表达式2,条件表达式2为True时的值……
])2022年11月12日星期六兰州理工大学计算机与通信学院328常见错误1.在选择结构中缺少配对的结束语句对多行式的If块语句中,应有配对的EndIf语句结束。2.多边选择ElseIf关键字的书写和条件表达式的表示E
lseIf不要写成ElseIf;多个条件表达式次序问题,见例3.SelectCase语句的使用SelectCase后不能出现多个变量;Case子句后不能出现变量见例2022年11月12日星期六兰州理工大学计算机与通信学院329四.循环结构1.Fo
r循环语句(一般用于循环次数已知)形式For循环变量=初值to终值[Step步长]语句块[ExitFor]语句块Next循环变量步长循环变量在终值内图1-3-13For循环语句语句块ExitFor语句块循环变量加步长TF循环变量得初值循环体>0初值<终值=1时,可省略<0
初值>终值=0死循环循环次数)1(+=−步长初值终值Int例:ForI=2To13Step3循环执行次数PrintI,输出I的值分别为:NextI25811Print:Print“I=“,I出了循环输出为:I
=144)1(3213=+=−Int2022年11月12日星期六兰州理工大学计算机与通信学院3302.Do…Loop循环语句(用于控制循环次数未知)形式1:Do{While|Until}<条件>语句块[ExitDo语句块]Loop形式2:Do语句块[Ex
itDo语句块]Loop{While|Until}<条件>表达式列表1FTFTExitDo语句块语句块ExitDo语句块语句块表达式列表1图1-3-16Do…LoopWhile图1-3-15DoWhile…Loop2022年11月12日星期
六兰州理工大学计算机与通信学院331例4.12用辗转相除法求两自然数m,n的最大公约数和最小公倍数。分析:求最大公约数的算法思想:(1)对于已知两数m,n,使得m>n;(2)m除以n得余数r;(3)若r=0,则n为最大公约数结束;否则执行(4);(4)mn,nr,
再重复执行(2)。例:求m=14,n=6的最大公约数.Ifm<nThent=m:m=n:n=tr=mmodnDoWhile(r<>0)m=nn=rr=mmodnLoopPrint"最大公约数=",nmnr1462620m=m-nm>n
n=n-mn>mm、n为公约数m=n辗转相减法DoWhilem<>nIfm>nThenm=m-nElsen=n-mEndIfLoopmn146862624222022年11月12日星期六兰州理工大学计算机与通信学院3323.循环的嵌套一个循
环体内又包含了一个完整的循环结构称为循环的嵌套.例4.13打印九九乘法表.Fori=1To9Forj=1To9Forj=1Toise=i&"×"&j&"="&i*jPicture1.PrintTab((j
-1)*9+1);se;NextjPicture1.PrintNexti思考:打印上三角或下三角程序如何改动?要打印下三角?2022年11月12日星期六兰州理工大学计算机与通信学院333对于循环的嵌套,要注意以下事项:(1)内循环变量与外循环变量不能同名;(2
)外循环必须完全包含内循环,不能交叉;(3)不能从循环体外转向循环体内,也不能从外循环转向内循环,反之则可以。正确错误Forii=1To10Forjj=1To20…NextiiNextjjForii=1To10Forii=1To20…Nextii
NextiiForii=1To10Forjj=1To20…NextjjNextiiForii=1To10…NextiiForii=1To10…Nextii2022年11月12日星期六兰州理工大学计算机与通信学院334四.其他辅
助控制语句1.GoTo语句形式:GoTo{标号|行号}作用:无条件地转移到标号或行号指定的那行语句.标号是一个字符序列,行号是一个数字序列.2.Exit语句多种形式:ExitFor、ExitDo、ExitSub、Exi
tFunction等。作用:退出某种控制结构的执行。3.End语句多种形式:End、EndIf、EndSelect、EndWith、EndType、EndSub、EndFunction、作用:End结束一
个程序的运行;其余表示某个结构的结束,与对应的结构语句配对出现。2022年11月12日星期六兰州理工大学计算机与通信学院3354.With语句形式如下:With对象语句块EndWith作用:对某个对象执行一系列的操作,而不用重复指出对象的名称。WithLabel1.He
ight=2000.Width=2000.FontSize=22.Caption="ThisisMyLabel"EndWithLabel1.Height=2000Label1.Width=2000Label1.FontSize=
22Label1.Caption="ThisisMyLabel"等价2022年11月12日星期六兰州理工大学计算机与通信学院336五、常用算法(一)算法是对某个问题求解过程的描述1.累加、连乘1~100的5或7的倍数的和Sum=0Fori=1To100IfiMo
d5=0OriMod7=0ThenSum=Sum+iEndIfNextiPrintSum3~10的乘积t=1Fori=3To10t=t*iNextiPrintt思考:若把循环体前面置各变量初值的语句放在循环体内,程序运行时会产生什么情况?2022年11月12日星期六兰州理工大学
计算机与通信学院337例4.14求自然对数e的近似值,要求其误差小于0.00001,近似公式为:该例题涉及两个问题:(1)用循环结构求级数和的问题。本例根据某项值的精度来控制循环的结束与否。(2)累加:e=e+t循环体外对累加和的变量清零e=0连乘:n=n*i循环体外对连乘积变量置1n=1Priv
ateSubForm_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!11ei2022年11月12日星期六兰州理工大学计算机与通信学院3382.求素数判别某数m是否为素数最简单的方法是
:对于m从i=2,3,…,m-1判别m能否被i整除,只要有一个能整除,m不是素数,否则m是素数。求100以内的素数Form=2To100Fori=2Tom-1If(mModi)=0ThenGoToNotNextM
NextiPrintmNotNextM:Nextmm是否为素数求100以内的素数思考:此例用GoTo语句对非素数不在判断,若不用GoTo语句,如何修改程序?见例4.152022年11月12日星期六兰州理工大学计算机与通信学院3393.穷举法“穷举法”也称为“
枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。例4.16百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。设母鸡、公鸡、小
鸡各为x、y、z只,根据题目要求,列出方程为:x+y+y=1003x+2y+0.5z=100三个未知数,两个方程,此题有若干个解。解决此类问题采用“试凑法”,把每一种情况都考虑到。方法一:最简单三个未知数利用三重循环来实现。方法二:从三个未知数的关系,利用两重循环来实现。2022年
11月12日星期六兰州理工大学计算机与通信学院3404.递推法“递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。例4.17
猴子吃桃子。小猴在一天摘了若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半零一个,到第7天早上要吃时只剩下一个了,问小猴那天共摘下了多少个桃子?分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒
数第三天的桃子……。设第n天的桃子为xn,那么它是前一天的桃子数。2)1(12111+=−=−−nnnnxxxx也就是:即:2022年11月12日星期六兰州理工大学计算机与通信学院3415.最小、最大值在若干个数中求
最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较。例:随机产生10个100~200之间的数,求最大值。PrivateSubCommand1_Cl
ick()Max=100Fori=1To10x=Int(Rnd*101+100)Printx;Ifx>MaxThenMax=xNextiPrintPrint"最大值=";MaxEndSub2022年11月12日星期六兰州理工大学计算机与通信学院342例4.18实际应用,求最短残料。有
一根长度为321米的钢材料,要将它截取成两种规格a、b的长度分别为17米和27米的短料,每种至少1段,问分隔成a,b各多少段后,剩余的残料r最少?分析,该题利用“试凑法”通过二重循环求残料r的最小值正数,残料不可能是负数。程序如下:PrivateSubCommand1_Click(
)Dima%,b%,r!,ia%,ib%r=321'最小值初值取钢材料的长度Forb=1To321\27'b最多的段数Fora=1To321\17-b'a最多的段数t=321-b*27-a*17'当前的残料Ift>0Andt<r
Thenr=t'求最短的残料ia=a'最短残料时a的段数ib=b'最短残料时b的段数EndIfNextaNextbPrintia,ib,rEndSub2022年11月12日星期六兰州理工大学计算机与通信学院343常见错误1.不循环或死循环的问题主要是循环条件、循环初值、循环终值
、循环步长的设置有问题。2.循环结构中缺少配对的结束语句For少配对的Next3.循环嵌套时,内外循环交叉4.累加、连乘时,存放累加、连乘结果的变量赋初值问题(1)一重循环在一重循环中,存放累加、连乘结果的变量初值设置应在循环语句前
。(2)多重循环这要视具体问题分别对待。2022年11月12日星期六兰州理工大学计算机与通信学院344第五章数组(4学时)5.1数组的概念5.2静态数组及声明5.3动态数组及声明5.4数组的基本操作5.
5控件数组5.6自定义数据类型5.7常用算法(二)5.8常见错误2022年11月12日星期六兰州理工大学计算机与通信学院345一、数组的概念1.引例例5.1若我们要求一个班100个学生的平均成绩,然后统计高于平均分的人数。按以前简单变量的使用和循环结构相结合,求平均
成绩程序段如下:aver=0Fori=1To100mark=InputBox("输入"+i+"位学生的成绩")aver=aver+markNextiaver=aver/100但若要统计高于平均分的人数,则无法实现。mark是一个简单变量,
存放的是最后一个学生的成绩。已有知识解决方法:再重复输入成绩,带来两个问题:(1)输入数据的工作量成倍增加;(2)若本次输入的成绩与上次不同,则统计的结果不正确。解决此问题的根本方法,引入数组,始终保持输入的数据,一次输入,多次使用。2022年11月12日星期六兰州理工大学
计算机与通信学院346二、数组的声明数组并不是一种数据类型,而是一组相同类型的变量的集合。数组必须先声明后使用。两类数组:静态(定长)数组、动态(可变长)数组1.静态数组及声明形式:Dim数组名(下标1[,下标2…])[As类型]声明了数组
的名、维数、大小、类型维数:几个下标为几维数组,最多60维。下标:[下界To]上界省略下界为0,必须为常数。每一维大小:上界-下界+1数组大小:每一维大小的乘积例:Dimmark(1to100)AsInteger2022年11月12日星期六兰州理工大学计算机与通信学院34
7DimlArray(0To3,0To4)AsLong共有4×5个元素等价于:DimlArray(3,4)AsLong注意:(1)下界缺省为0,也可在重新定义数组的下界。例如:OptionBase1(2)错误的声明
,下标是变量n=Inputbox(“输入n”)Dimx(n)AsSingle(3)在数组声明中的下标说明了数组的整体,即每一维的大小;而在程序其他地方出现的下标表示数组中的一个元素。两者写法形式相同,但意义不同。例如:Dimx(10)AsInteger'声明了x数组有11个元素x(10)=100
'对x(10)这个数组元素赋值2022年11月12日星期六兰州理工大学计算机与通信学院348三、动态数组及声明动态数组指在声明数组时未给出数组的大小(省略括号中的下标),当要使用它时随时用ReDim语句重新指
出数组大小。形式如下:ReDim数组名(下标[,下标2…])[As类型]例:SubForm_Load()DimsArray()AsSingle…ReDimsArray(4,8)…EndSub说明:(1)Dim、Private、Public变量
声明语句是说明性语句,可出现在过程内或通用声明段ReDim语句是执行语句,只能出现在过程内。(2)在过程中可多次使用ReDim来改变数组的大小,也可改变数组的维数.(3)每次使用ReDim语句都会使原来数组中的值丢
失,可以在ReDim语句后加Preserve参数用来保留数组中的数据,但使用Preserve只能改变最后一维的大小,前面几维大小不能改变。例5.2,求若干个学生的平均分。(4)ReDim中的下标可以是常量,也可以是有了确定值的
变量。2022年11月12日星期六兰州理工大学计算机与通信学院349四、数组的基本操作1.数组元素的赋初值(1)用循环Fori=1To10iA(i)=0Nexti(2)Array函数DimibAsVariantib=Array("abc","def","67")Fori=0
ToUBound(ib)Picture1.Printib(i);"";Nexti注意:(1)利用Array对数组各元素赋值,声明的数组是可调数组或连圆括号都可省,并且其类型只能是Variant。(2)数组的下阶为零,上界由Array函数括号内的参数个数可决定,也可通过函数Ubou
nd获得。2022年11月12日星期六兰州理工大学计算机与通信学院3502.数组的赋值在VB6.0中,提供了数组直接对数组的赋值。例如:Dima()AsVariant,b()AsVariant,i%a=Array(1,2,3,4,5)ReDimb(UBound
(a))b=a3.数组的输出输出方阵sC中的下三角元素Fori=0To4Forj=0Toisc(i,j)=i*5+jPrintsc(i,j);"";NextjPrint'换行NextIFori=0ToUBound(a)b(i)=a(
i)Nexti注意:赋值号左边的数组只能声明为Variant的可调数组或简单变量。2022年11月12日星期六兰州理工大学计算机与通信学院3514.求数组中最大元素及所在下标DimMaxAsInteger,iMaxAsIntege
rMax=iA(1):iMax=1Fori=2To10IfiA(i)>MaxThenMax=iA(i)iMax=iEndIfNextI5.将数组中各元素交换Fori=1To10\2t=iA(i)iA(i)=iA(10-i+1)iA(10-i+1)=tNextI2022年11月1
2日星期六兰州理工大学计算机与通信学院352五.控件数组一组相同类型的控件组成。它们共用一个控件名,具有相同的属性,建立时系统给每个元素赋一个唯一的索引号(Index)。控件数组共享同样的事件过程,通过返回的下标值区分控件数组中的各个元素。
例:PrivateSubcmdName_Click(IndexAsInteger)…IfIndex=3then‘处理第四个命令按钮的操作EndIf…EndSub1.在设计时建立控件数组⚫在窗体上画出控件,进行属性设置,这是建立
的第一个元素⚫选中该控件,进行“Copy”进行若干次和“Paste”操作建立了所需个数的控件数组元素。⚫进行事件过程的编程。2022年11月12日星期六兰州理工大学计算机与通信学院353例5.3建立含有四个命令按钮的控件数组,当单击某个命令按钮,分别显示不同的图形或结束操作
。PrivateSubCommand1_Click(IndexAsInteger)SelectCaseIndexCase0……"画直线"Case1……"画矩形"Case2……“画圆”CaseElseEndEndSelectEndSub2022年11月12日星期六兰州理工大学计算机与
通信学院3542.运行时添加控件数组建立的步骤如下:⚫在窗体上画出某控件,设置该控件的Index值为0,表示该控件为数组,这是建立的第一个元素⚫在编程时通过Load方法添加其余的若干个元素,也可以通过
Unload方法删除某个添加的元素。⚫每个新添加的控件数组通过Left和Top属性确定其在窗体的位置,并将Visible属性设置为True。例5.4利用在运行时产生控件数组,构成一个国际象棋棋盘。当单击棋格,显示对应的序号,并且将所有棋格
颜色变反。2022年11月12日星期六兰州理工大学计算机与通信学院355六、自定义数据类型一组不同类型变量的集合。相当于C语言中的结构类型;Pascal中的记录类型。1.自定义类型的定义形式如下:Type自定义类型名元素名[(下标)]As类型
名…[元素名[(下标)]As类型名]EndType例如以下定义了一个有关学生信息的自定义类型:TypeStudTypeNoAsInteger'学号NameAsString*20'姓名SexAsString*1'性别Mark(1To4)AsSing
le'4门课程成绩TotalAsSingle'总分EndType元素名:表示自定义类型中的一个成员。下标:表示是数组。类型名:为标准类型。2022年11月12日星期六兰州理工大学计算机与通信学院356注意:(1)自定义类型一般在标准模块(.BAS)中定义,默认是Public;在窗体必须是P
rivate。(2)自定义类型中的元素类型可以是字符串,但应是定长字符串。(3)不要将自定义类型名和该类型的变量名混淆,前者表示了如同Integer、Single等的类型名,后者VB根据变量的类型分配所需的内存空间,存贮数据。(4)自定
义类型一般和数组结合使用,简化程序的编写。2.自定义类型变量的声明和使用(1)声明形式:Dim变量名As自定义类型名例:DimStudentAsStudType(2)引用形式:变量名.元素名例:表示Student变量中的姓名,第4门课程的成绩,则表示如下:Student.N
ame,Student.Mark(4)3.自定义类型数组的应用例5.5利用自定义类型数组,编一类似数据管理(输入、显示、查询)的程序。2022年11月12日星期六兰州理工大学计算机与通信学院357七、常用算法(二)1.统计例5.6输入
一串字符,统计各字母出现的次数,大小写字母不区分。分析:1.统计26个字母出现的个数,先声明一个具有26个元素的数组,每个元素的下标表示对应的字母,元素的值表示对应字母出现的次数。2.从输入的字符串中逐一取出字符,转
换成大写字符(使得大小写不区分),进行判断。3.运行界面:ForI=1Tolec=UCase(Mid(Text1,I,1))Ifc>="A"Andc<="Z"Thenj=Asc(c)-65+1a(j)=a(j)+1EndIfNextI2022年11月12日星期六兰州理工大学
计算机与通信学院3582.大量数据的输入例5.7输入一系列的数据,并将它们分离后存放在数组中。对输入的数据允许修改和自动识别非数字数据。分析:(1)利用文本框输入和编辑数据,输入时去除非法数字。(2)输入结束利用Rplace函数去除重复输入的分隔符;(3)对利用Split函数按分
隔符分离,放到数组中;(4)还可利用Join函数将数组中各元素合并成一个字符串。2022年11月12日星期六兰州理工大学计算机与通信学院359原始数据869327a(1)a(2)a(3)a(4)a(5)a(6)第1趟交换后269387a(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排序过程示意图3.数组排序例5.8对已知存放在数组中的n
个数,用选择法按递增顺序排序。(1)从n个数的序列中选出最小的数(递增),与第1个数交换位置;(2)除第1个数外,其余n-1个数再按(1)的方法选出次小的数,与第2个数交换位置;(3)重复(1)n-1遍,最后构成递增序列。Fori=1Ton-1iMi
n=iForj=i+1TonIfiA(j)<iA(iMin)TheniMin=jNextjt=iA(i):iA(i)=iA(iMin):iA(iMin)=tNextI2022年11月12日星期六兰州理工大学计算机与通信学院3604.数组元素的插入与删除(1
)插入例5.10在有序数组a(1ton)(原有n-1个元素)插入一个值Key元素,算法:查找要插入的位置k(1<=k<=n-1)腾出位置,把最后一个元素开始到第K个元素往后移动一个位置第k个元素的位置腾出,就可将数据Key插入14710131619222514k(2)删除首先也是要找到欲删除的元素
的位置k;然后从k+1到n个位置开始向前移动;最后将数组元素减1。14710131416192225k2022年11月12日星期六兰州理工大学计算机与通信学院361八、数组中常见错误和注意事项1.静态数组声明下标出现变量
n=InputBox("输入数组的上界")Dima(1Ton)AsInteger2.数组下标越界引用的下标比数组声明时的下标范围大或小。Dima(1To30)AsLong,i%a(1)=1:a(2)=1Fori=3To30a(i)=a(i-2)+a(i-1)NextI3.数组维数错数组声明
时的维数与引用数组元素时的维数不一致。Dima(3,5)AsLonga(I)=104.Aarry函数使用问题只能对Variant的变量或动态数组赋值。5.获得数组的上界、下界UBound、Lbound函数2022年11月12日星期六兰州理工大学计算机与通信学院362第六章过程(5学时)6.1函
数过程的定义与调用6.2子过程的定义与调用6.3参数传递6.4变量、过程的作用域6.5递归6.6常用算法(三)6.7重点和难点2022年11月12日星期六兰州理工大学计算机与通信学院363除了系统提供的内部函数过程和事件过程外,用户可自定义过程:⚫“S
ub”保留字开始的为子过程⚫“Function”保留字开始的为函数过程一、函数过程的定义1.引例6.1已知多边形的各条边的长度,要计算多边形的面积。计算多边形面积,可将多边形分解成若干个三角形。计算三角形面积的公式如下:abcdefgS1S2S3)(21))()((zyxczcycxc
carea++=−−−=xyz定义函数过程PublicFunctionarea(x!,y!,z!)AsSingleDimc!c=1/2*(x+y+z)area=Sqr(c*(c-x)*(c-y)*(c-z))EndFunction
调用函数过程:Subcommand1_click()……输入若干个三角形边长S=area(a,b,c)+area(c,d,e)+area(e,f,g)PrintsEndSub2022年11月12日星期六兰州理工大学计算机与通信学院3642.函数过程的定义
自定义函数过程有两种方法:(1)利用“工具”菜单下的“添加过程”命令定义,生成一个函数的框架(2)利用代码窗口直接定义函数过程形式:Function函数过程名([参数列表])[As类型]局部变量或常数定义语句块函数名=返回值函数过程体[E
xitFunction]语句块函数名=返回值EndFunction函数过程名:命名规则同变量名参数列表形式:[ByVal]变量名[()][As类型]称为形参或哑元,仅表示参数的个数、类型,无值。函数名=返回
值在函数体内至少对函数名赋值一次[ExitFunction]:表示退出函数过程2022年11月12日星期六兰州理工大学计算机与通信学院365例6.2同标准函数Replace一样,定义MyReplace(S,OldS,NewS)函数过程当调用MyReplace("a
bcdefgabcdecd","cd","3“)时函数的返回值为"ab3efgab3e3“FunctionMyReplace(s$,OldS$,NewS$)AsStringDimi%,lenOldS%lenOldS=Len(OldS)'取Ol
dS字符子串长度i=InStr(s,OldS)'在字符串中找有否OldS字符子串DoWhilei>0'找到用NewS字符子串替换OldS字符子串s=Left(s,i-1)+NewS+Mid(s,i+lenOldS)i=InStr(s,OldS)'找下一个
OldS字符子串LoopMyReplace=s'替换后的字符串赋值给函数过程名EndFunction假定S为“abcdefgabcdecd”,Oolds为“cd”,News为"3"(“abcdefgabcdecd”,“cd
”,“3”)第1次I=3结果“ab3efgabcdecd”(“ab3efgabcdecd”,“cd”,“3”)第2次I=9结果“ab3efgab3ecd”(“ab3efgab3ecd”,“cd”,“3”)第3次I=11结果"ab3efgab3e3"2022年11月12日星期六兰州理工大学计算
机与通信学院3663.函数过程的调用函数过程的调用同标准函数调用,参与表达式运算,形式如下:函数过程名([参数列表])参数列表:称为实参或实元,它必须与形参个数相同,位置与类型一一对应可以是同类型的常量、变量、表达式
执行流程:PrivateSubCommand1_Click()Text1=MyReplace(Text1,"cd","3")ST=(“VisualBasic程序设计教程5.0版”PrintMyReplace(ST,"5.0","6.0")EndSubFunctionM
yReplace$(s$,OldS$,NewS$)Dimi%,lenOldS%lenOldS=Len(OldS)i=InStr(s,OldS)DoWhilei>0s=Left(s,i-1)+NewS+Mid(s,
i+lenOldSi=InStr(s,OldS)LoopMyReplace=sEndFunctionText1=MyReplace(Text1,"cd","3")PublicFunctionMyReplace(S$,Old
S$,NewS$)AsString2022年11月12日星期六兰州理工大学计算机与通信学院367二、子过程函数过程的不足:(1)不是为了获得某个函数值,而是为了某种功能的处理,如例1.1。(2)要获得多个结果。1.引例编写一个两个数交换的过
程供多次调用。Swap(x,y)子过程的定义主调程序调用Swap子过程PublicSubSwap(x,y)PrivateSubForm_Click()DimtDima,bt=xa=10x=yb=20y=tCallSwap(a,b)
EndSubPrint"a=";a,",b=";bEndSub2022年11月12日星期六兰州理工大学计算机与通信学院3682子过程定义Sub子过程名[(参数列表)]局部变量或常数定义语句[ExitSub]语句EndSub3子过程的调用子过程名[参数列表]或Call子过程名(参数列表)
4.子过程与函数过程区别:(1)函数过程名有值,有类型,在函数体内至少赋值一次;子过程名无值,无类型,在子过程体内不能对子过程名赋值;(2)调用时,子过程调用是一句独立的语句。函数过程不能作为单独的语句加以调用,必须参与表达式运算。(3)一般当过程有一个函数值,使用函数过程较直观;反之若过
程无返回值,或有多个返回值,使用子过程较直观。2022年11月12日星期六兰州理工大学计算机与通信学院369例6.4分别编一计算某级数部分和的子过程和函数过程,并调用。级数为:精度为:...!...!212+++++nxxxneps!nxn2022年11月12日星期六兰州理工大学计算机与通信学院
370程序运行流程:PrivateSubCommand1_Click()Dimf1#,f2#f1=jishu1(2#,0.000001)Calljishu2(f2,2#,0.000001)Print"f1=";f1,"f2=";f2EndSubFu
nctionjishu1(x!,eps#)AsDou…jishu=表达式EndFunction找函数名调用jishu1函数名带了值返回Subjishu2(s#,x!,eps#)…s=表达式EndSub①②③④⑤找子过程名调用j
ishu2⑥⑦⑧2022年11月12日星期六兰州理工大学计算机与通信学院371三、参数传递指主调过程的实参传递给被调过程的形参。1.传址与传值传址:形参得到的是实参的地址,当形参值的改变同时也改变实参的值。传值:形参得到的是实参的值,形参值的改变不会影响实参的值。
例6.5两个变量的交换SubSwap1(ByValx%,ByValy%)t%=x:x=y:y=tEndSubPrivateSubCommand1_Click()a%=10:b%=20:Swap1a,b'传值
Print"A1=";a,"B1=";ba=10:b=20:Swap2a,b'传地址Print"A2=";a,"B2=";bEndSubSubSwap2(x%,y%)t%=x:x=y:y=tEndSuba的地址101010aaxx形参实参ByVal传值传地址2022年11月12日星期六兰州理
工大学计算机与通信学院3722.数组参数的传递当参数是数组通过传址方式进行传递。注意:•在实参和形参中写数组名,忽略维数的定义,但圆括号不能省。•被调过程可通过Lbound和Ubound函数确定实参数组的下、上界。Lbound和Ub
ound函数的形式如下:{L|U}bound(数组名[,维数])其中:维数指明要测试的是第几维的下标值,缺省是一维数组。例6.7编一函数tim,求任意一维数组中各元素之积。调用tim,求和Functiontim(a()AsInteger)Dimt#,i%t=1Fori=Lbound(a)T
oUbound(a)t=t*a(i)Nextitim=tEndFunction==511iiat==832iibt调用:SubCommand1_Click()Dima%(1To5),b%(3To8)…t1#
=tim(a())t2#=tim(b())Printt1,t2EndSub2022年11月12日星期六兰州理工大学计算机与通信学院373使用过程注意事项:1.确定自定义的过程是子过程还是函数过程函数过程名有值,子过程名无值。2.过
程中形参的个数和传递方式的确定过程中参数的作用是实现过程与调用者的数据通信。(1)从主调程序获得初值,值传递。(2)将结果返回给主调程序,地址传递。3.实参与形参结合时对应问题个数、类型、位置、次序一一对应。形参是值传递,对应实参可以是表达
式、常量、数组元素。形参是地址传递,对应实参只能是简单变量。数组、记录类型、对象只能是地址传递。2022年11月12日星期六兰州理工大学计算机与通信学院374实验6.4回文数的判断中形参的确定1.函数过程,形参一个,值传递对所判断的数字;函数名是否为回文数。FunctionIsH(ByVals
sAsString)AsBoolean2.子过程,形参两个,值传递对所判断的数字,地址传递是否位回文数。Subhui(ByValssAsString,TagAsBoolean)实验6.2子过程DeleStr(s1,s2)形参的确定s1,要处理的字符串,从主调程序得初值,删除子串后结果在S1
中,所以地址传递。s2删除的子串,值传递。实验6.3函数过程MaxLength(s)形参的确定S要处理的字符串,值传递。MaxLength函数名,最长的单词长度。2022年11月12日星期六兰州理工大学计算
机与通信学院375四、变量、过程的作用域作用域:变量、过程随所处的位置不同,可被访问的范围。1.过程的作用域窗体/模块级:加Private关键字的过程,只能被定义的窗体或模块中的过程调用。全局级:加Public关键字(缺省)的过程,可供该应用程序的所有窗体和所有标准模块中的过程调用。202
2年11月12日星期六兰州理工大学计算机与通信学院3762.变量的作用域局部变量:在过程内用声明的变量,只能在本过程中使用。窗体/模块级变量:在“通用声明”段中用Dim语句或用Private语句声明的变
量,可被本窗体/模块的任何过程访问。全局变量:在“通用声明”段中用Public语句声明的变量,可被本应用程序的任何过程或函数访问。2022年11月12日星期六兰州理工大学计算机与通信学院377例如在下面一个标准模块文件中不同级的变量声明:PublicPaAsinteger'全局变量
PrivateMbAsstring*10'窗体/模块级变量SubF1()DimFaAsinteger'局部变量…EndSubSubF2()DimFbAsSingle'局部变量…EndSub若在不同级声明相同的变量名,系统按局部、窗体/模块、全局次序访问如:PublicTemp
Asinteger'全局变量SubForm_Load()DimTempAsInteger'局部变量Temp=10'访问局部变量Form1.Temp=20'访问全局变量必须加窗体名PrintForm1.Temp,Temp'显示
2010EndSub2022年11月12日星期六兰州理工大学计算机与通信学院3783.静态变量局部变量声明:Dim声明,随过程的调用而分配存贮单元,变量的初始化;过程体结束,变量的内容自动消失,存贮单元释放。Static声明,每次调用过程,变量保持原来的值。声明形式
:Static变量名[AS类型]StaticFunction函数过程名([参数列表])[As类型]StaticSub子过程名[(参数列表)]过程名前加Static,表示该过程内的局部变量都是静态变量。例6.9PrivateSubForm_Cli
ck()Dimi%,isum%Fori=1To5isum=sum(i)Printisum,NextiEndSubPrivateFunctionsum(nAsInteger)DimjAsIntegerj=j+nsum=jEndFunctionStaticjAsInteger,结果?1,2,3,4
,52022年11月12日星期六兰州理工大学计算机与通信学院379Subf1(x)…x=f2(xx)*3…EndSubSubCommand1_Click()……Callf1(y)EndSubFunctionf2(x)……f2=f3(x)+3EndSubFunctionf3(x)…
…f3=x*xEndSubSubf1(x)…Callf1(y)EndSub过程的直接调用SubCommand1_Click()……Callf1(y)EndSub过程的递归调用五、递归2022年11月12日星期
六兰州理工大学计算机与通信学院3801.递归的概念用自身的结构来描述自身就称为“递归”。例对阶乘的定义:)!2()1()!1()!1(!−−=−−=nnnnnn2.递归过程过程在自身定义的内部调用自己。例6.10编fac(n)=n!的递归函数Functionfac(nAsInte
ger)AsIntegerIfn=1Thenfac=1Elsefac=n*fac(n-1)EndIfEndFunction−==1)1fac(*11)fac(nnnnnSubCommand1_Click()Print“fa
c(4)=”;fac(4)EndSub结果:fac(4)=242022年11月12日星期六兰州理工大学计算机与通信学院381递推回归在递归处理中,用栈来实现。栈中存放形参、局部变量、返回地址。递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。回归过程:不断从栈
中弹出当前的参数,直到栈空。递归算法设计简单,但消耗的机时和占据的内存空间比非递归大。思考:若上述fac函数中:Ifn=1Thenfac=1即仅有语句:fac=n*fac(n-1)或n<=0程序运行将造成何结果?由此可见构成递归的结构如下:递归结束条
件及结束时的值;能用递归形式表示,并且递归向终止条件发展。2022年11月12日星期六兰州理工大学计算机与通信学院382例6.11利用递归求最大公约数==0Mod)Mod,gcd(0Mod),gcd(nmn
mnnmnnmPublicFunctiongcd(mAsInteger,nAsInteger)AsIntegerIf(mModn)=0Thengcd=nElsegcd=gcd(n,mModn)EndIfEndFunctionPrivateSubForm_Click()Print
gcd(10,4)EndSub2022年11月12日星期六兰州理工大学计算机与通信学院383分析以下子过程的功能,当n=100,r=8,结果是多少?PublicSubf(ByValn%,ByValr%)①Ifn>rThenCallf(n\r,r)②PrintnModr;③
EndSubPrivateSubCommand1_Click()Callf(100,8)EndSubnr返回地址128210082显示结果1442022年11月12日星期六兰州理工大学计算机与通信学院384例6.12打印
分形图2022年11月12日星期六兰州理工大学计算机与通信学院385递归常见错误:1.递归调用出现“栈溢出”在递归调用时,其中的参数要向终止方向收敛。如下求阶乘的递归函数过程:PublicFunctionfac(nAsInteger)AsIntegerIfn=1Th
enfac=1Elsefac=n*fac(n-1)EndIfEndFunctionPrivateSubCommand1_Click()Print“fac(5)=”;fac(5)Print“fac(5)=”;fac(-5)‘栈溢
出EndSub2022年11月12日星期六兰州理工大学计算机与通信学院3861.数制转换例6.13将一个十进制整数m转换成r(2-16)进制字符串。方法:将m不断除r取余数,直到商为零,以反序得到结果。6.6常用算法(三)2022年11月
12日星期六兰州理工大学计算机与通信学院3872.例6.14加密和解密简单加密的思想是:将每个字母C加一序数K,式子c=chr(Asc(c)+k),例如序数k为5,这时“A”➔“F”,“a”➔“f”,
“B”➔“G”…当加序数后的字母超过“Z”或“z”则c=hr(Asc(c)+k-26)。解密为加密的逆过程。2022年11月12日星期六兰州理工大学计算机与通信学院3883.查找(1)顺序查找例6.15。顺序查找根据查找的关键值与数组中的元素逐一比较.数组可无序。
PublicSubSearch(a()AsVariant,ByValkeyAsVariant,index%)Dimi%Fori=LBound(a)ToUBound(a)Ifkey=a(i)Then'找到,元素的下标在in
dex中,结束查找index=iExitSubEndIfNextiindex=-1'找不到,index形参的值为-1EndSub平均查找次数n/22022年11月12日星期六兰州理工大学计算机与通信学院389Key<a(mid)high=mid-1查找区域缩小一半,继续Ke
y=a(mid)找到结束Key>a(mid)low=mid+1查找区域缩小一半,继续直到找到或查找区域中无元素.本例用递归实现6.16Subbirsearch(a(),low%,high%,key,index%)(2)二分法查找要查找的数组必须有序。思想:要
查找的关键值Key同数组的中间mid项元素比较:12345678111222333444555666777888Lowhighmid444Key2022年11月12日星期六兰州理工大学计算机与通信学院3904.排
序选择、冒泡、插入法排序等。前两种排序欲排序的数据全部输入后,再进行排序;插入法排序每输入一项,马上插入到数组应在的位置,数组始终有序。例6.17实现的步骤:(1)输入欲排序的数据项x;在数组a中找x应所处的位置j;(2)从数组的最后一个元素开始到下标j依次往后移,使j位置空
出;(3)将x放入位置j处,一个数据插入完成;(4)有若干个数重复(1)~(3)。2022年11月12日星期六兰州理工大学计算机与通信学院391)(')(1iiiixfxfxx−=+5.例6.18高次方程求根有牛顿迭
代法、二分法、弦截法等(1)牛顿迭代法迭代公式:思想:对方程给定一个初值x0作为方程的近似根,利用迭代公式,求得x1,当x1为求得的近似根,否则x1作为x0再迭代。−01xxx0x1)(xf2022年11月1
2日星期六兰州理工大学计算机与通信学院392(2)二分法求根思想:已知求根区间[a,b]有一根,每次把求根区间缩小一半,直到找到解或求根区间足够小。方法:求[a,b]的中点c,判断f(c)=0,c为求
得的根,结束;f(a)与f(c)同号,则[a,c]无根,代替a;否则[c,b]无根,c代替b;使求根区间缩小一半,重复上述步骤,直到区间小于精度。xbaacf(x)PublicFunctionhalfRoot(ByVala!,ByValb!)
Dimc!DoWhileAbs(b-a)>0.00001c=(a+b)/2Iff(c)=0ThenExitDoElseIff(a)*f(c)>0Thena=cElseb=cEndIfLoophalfRoot=cEndFunction2022年11月12日星期六兰州理工大学计算机与通信学院393
6.例6.19数值积分有矩形法、梯形法、抛物线法(又称辛卜生法)等。梯形法积分的思想是:将积分区间[a,b]n等分,小区间的长度为,第i块小矩形的近似面积为:整个积分的结果为这n块小面积的累加,即:nabh−=hxfxfsiii+=+2)()(1hxfxfSniii+=+11
2)()(PublicFunctiontrapez(ByVala!,ByValb!,ByValn%)AsSingleDimsum!,h!,x!h=(b-a)/nsum=(f(a)+f(b))/2Fori=1Ton-1x=a+i*hsum=sum+f(x
)Nextitrapez=sum*hEndFunctionhxfbfafnii++−=11)())()((212022年11月12日星期六兰州理工大学计算机与通信学院3947.字符串处理例6.20编写一个英文打字训练的程序.要求如下:
(1)在标签框内随机产生30个字母的范文;(2)当焦点进入文本框时开始计时,并显示当时时间;(3)在键入文本框按产生的范文输入相应的字母;(4)当键入满了30个字母结束计时,禁止向文本框输入内容,键入的字符逐一范文比较,显示打字的速度和正确率。2022年11月12日星期六兰州理工大学计算机与通
信学院3956.7重点和难点1.确定自定义的过程是子过程还是函数过程函数过程名有值,子过程名无值。过程有一个返回值,则使用函数过程;若返回多个值或无返回值,一般使用子过程。2.过程中形参的个数和传递方式的确定过程中参数的作用是实现过程与调用者的数据通信。(1)从主调程序获得初值,
值传递。(2)将结果返回给主调程序,地址传递。3.实参与形参结合时对应问题个数、类型、位置、次序一一对应。形参是值传递,对应实参可以是表达式、常量、数组元素。形参是地址传递,对应实参只能是简单变量。数组、记录类型、对象只能是地址传递。4.变量的作用域问题局部变量、静态变量、全局变量特点、作用
5.递归调用出现“栈溢出”递归过程中有终止的条件和终止时的值或某种操作;每递归调用一次,其中的参数要向终止方向收敛。2022年11月12日星期六兰州理工大学计算机与通信学院396第七章常用控件(4学时)7.1单选按钮和复选框7.2框架7.3列表框和组合框7.
4滚动条和Slide控件7.5时钟7.6ProgressBar控件7.7UpDown控件7.8Animation控件7.9SSTab控件7.10鼠标器和键盘2022年11月12日星期六兰州理工大学计算机与通信学院3971.标准控件内部控件出现在工具箱上的控件,20个2.ActiveX控件Act
iveX部件:是可以重复使用的编程代码和数据;是由用ActiveX技术创建的一个或多个对象所组成。ActiveX部件文件:扩展名OCX,在Windows的SYSTEM目录中。ActiveX部件ActiveX控件ActiveX文档Act
iveXDLLActiveXEXEActiveX控件添加到工具箱:工程/部件选定控件课前准备2022年11月12日星期六兰州理工大学计算机与通信学院398常用ActiveX控件所在的文件:ActiveX控件ActiveX部件
文件名通用对话框(CommonDialog)MicrosoftCommonDialogControl6.0COMDLG32.OCXToolBarMicrosoftWindowsCommonControl6.0MSCOMCTL.OCXStatusBarProgressBarSl
iderAnimationMicrosoftWindowsCommonControl-26.0MSCOMCT2.OCXUpDown2022年11月12日星期六兰州理工大学计算机与通信学院399ActiveX控件与ActiveXDLL/EXE的区别:ActiveX控件:有界面用“工程
/部件”命令加载工具箱上有图标ActiveXDLL/EXE:没有界面用“工程/引用”设置引用工具箱上没有图标3.可插入对象Windows应用程序的对象可插入对象,可添加到工具箱上同标准控件一样使用例如:Micro
softExcel工作表2022年11月12日星期六兰州理工大学计算机与通信学院4007.1单选钮和复选框Caption属性:文本标题。Alignment属性0:控件钮在左边,标题显示在右边。1:控件钮在右边,标题显示在左边。Value属性单选钮(
逻辑型)检查框(数值型)True:选定0--Unchecked:未被选定False:未选定1--Checked:选定2--Grayed:灰色,禁止选择Style属性0--Standard:标准方式1--Graphical:图形方式事件:Click因
为单击时自动改变状态,故不需要编写过程。见后页实例2022年11月12日星期六兰州理工大学计算机与通信学院401例7.1用单选钮和检查框设置文本框的字体。2022年11月12日星期六兰州理工大学计算机与通信学院4027.2框架(Frame)框架内控件的创建方法:方法1:单击工具箱上的工具,
然后用出现的“+”指针,在框架中适当位置拖拉出适当大小的控件。不能使用双击工具箱上图标的自动方式。方法2:将控件“剪切”到剪贴板,然后粘贴(Ctrl+V)到框架。框架设Caption为"字体"2022年11月12日星期六兰州理工大学计算机与通
信学院403Caption属性:框架标题Enabled属性False:标题呈灰色,不允许对框架内的对象进行操作。Visible属性True:框架及其控件可见。False:框架及其控件被隐含起来。Click、DblClick事件
一般不需要编写框架的事件过程。例7.2框架用法示例2022年11月12日星期六兰州理工大学计算机与通信学院4047.3列表框和组合框列表框各主要属性的值:List1.ListIndex=3(下标从0开始的)Lis
t1.ListCount=5List1.Selected(3)=True,其余为False。List1.Sorted=False,没有排序。List1.Text为“cox”,与List1.List(List1.L
istIndex)相等List1下拉式组合框简单组合框下拉式列表框列表框各主要属性的值:List1.ListIndex=0List1.ListCount=8List1.Selected(3)=True其余为False。List1.Sorted=Fal
seList1.Text为“李宁”Combo12022年11月12日星期六兰州理工大学计算机与通信学院4051.共有的重要属性(P:可在程序中设置或引用,D:可在设计状态设置)List:PD字符型数组,存放列表框的项目,下标是从0开始。ListIndex:P选中的项目的序号,没有项目被选定时为-
1ListCount:P项目的数量,ListCount-1是最后一项的下标。Sorted:DTrue:按字母顺序排列。False:按加入先后顺序排列。Text:P列表项中被选定的内容,List1.Li
st(List1.ListIndex)=List1.Text。2022年11月12日星期六兰州理工大学计算机与通信学院4062.列表框的特有属性Selected:P逻辑数组。Selected(i)的值为True表示第i+1项被选中。Mul
tiSelect0-None:禁止多项选择。1-Simple:简单多项选择。2-Extended:扩展多项选择。3.列表框的特有属性Style类型Style输入下拉式组合框0能简单组合框1能下拉式列表框
2不能2022年11月12日星期六兰州理工大学计算机与通信学院4074.方法AddItem对象.AddItemitem[,index]RemoveItem对象.RemoveItemindexClear对象.Clear5.事件列表框:Click、DblClick
组合框:Click,只有简单组合框才有DblClick事件一般不需要编写Click事件过程通常在单击命令按钮或发生DblClick事件时才读取Text属性2022年11月12日星期六兰州理工大学计算机与通信学院408例7.3对列表框进行项目添加、修改和删除操
作。例7.4对列表框进行项目添加、修改和删除操作。Check1Combo1Text1Check2Option1Option22022年11月12日星期六兰州理工大学计算机与通信学院4097.4滚动条和Slider控件共同具有的重要属性Max:最大值-32,7
68~32,767Min:最小值-32,768~32,767SmallChange最小变动值,单击箭头时移动的增量值。LargeChange最大变动值,单击空白处时移动的增量值。Value滑块所处位置所代表的值。水平滚动条垂直滚动条SmallChan
geMinValueMaxSmallChangeLargeChangeLargeChangeSlider控件Min属性Max属性SmallChange属性LargeChange属性2022年11月12日星期六
兰州理工大学计算机与通信学院410事件:Scroll:拖动滑块时会触发Scroll事件。Change:Value属性改变时触发Change事件。例7.5用一个文本框(txtSpeed)显示滚动条(hsbSpeed)滑块当前位置所代表的值。例
7.6调色板程序。SubhsbSpeed_Change()txtSpeed.Text=hsbSpeed.ValueEndSub例7.7用Slider控件设置文本框中的字体大小。2022年11月12日星期六兰州理工大学计算机与通信
学院411时钟控件以Interval为时间间隔产生Timer事件。属性Interval单位:ms(0.001s),0.5秒是500。Interval=0:屏蔽计时器。Enabled属性True:有效计时F
alse:停止时钟工作事件Timer例7.8定时的闹钟例7.9蝴蝶飞舞7.5时钟(Timer)2022年11月12日星期六兰州理工大学计算机与通信学院412Max属性Min属性MousePointer属性BorderStyle属性Appearance属性Orientat
ion属性Scrolling属性例7.10用进度条指示一个大数组的计算进度。7.6ProgressBar控件位于MicrosoftWindowsCommonControl6.0部件重要属性:Max、Min:该控件的界限Value:决定控件被填充多少2022
年11月12日星期六兰州理工大学计算机与通信学院413位于MicrosoftWindowsCommonControl-26.0通常与伙伴控件“捆绑”在一起使用。UpDown应用示例BuddyControlBuddyPropertyMinMaxValueIncrement7.7UpDown控
件2022年11月12日星期六兰州理工大学计算机与通信学院414位于MicrosoftWindowsCommonControl-26.0属性:Center:决定动画是否在控件的中央播放AutoPlay属性:决定在用Open方法打开文件时是否自动播放。方法:
Open:打开文件Play:播放动画Stop:停止播放Close:关闭文件例7.11为例7.10配上动画。7.8Animation控件2022年11月12日星期六兰州理工大学计算机与通信学院415位于MicrosoftTabbedDialogControl6.0重要属性Style:选
项卡样式Tabs:选项卡总数TabsPerRow:每一行选项卡的数目Rows:选项卡总行数TabOrientation:选项卡的位置。ShowFocusRect:决定选项卡上的焦点矩形是否可视。Tab:当前选项卡的序号。序号从
0开始,如果Tab为1,则第二个选项卡为当前活动的选项卡。例7.12选项卡制作示例7.9SSTab控件2022年11月12日星期六兰州理工大学计算机与通信学院4167.10鼠标器和键盘1.鼠标器事件注意:鼠标事件发生在什么对象上,是窗体上还是控件上。MouseD
own事件SubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)(发生在窗体上的事件过程)MouseUp事件SubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,X
AsSingle,YAsSingle)(发生在窗体上的事件过程)MouseMove事件SubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)(发生在窗体上的事件过程)2022年11月1
2日星期六兰州理工大学计算机与通信学院417(1)Button参数b2b1b0B0为1:按下了左键B1为1:按下了右键B2为1:按下了中键例如:Button为2(010B),即B1为1,表示按下了右键;如果按了左键,则B
0为1,B1和B2为0,Button为1(001B)IfShift=1Then'或者IfShift=vbLeftButtonThen…'这是按了左健后执行的代码…Endif使用符号常数:1—vbLeftB
utton:用户按下左键触发了鼠标事件;2—vbRightButton:用户按下右键触发了鼠标事件;4—vbMiddleButton::用户按下中键触发了鼠标事件。2022年11月12日星期六兰州理工大学计算机与通信学院418(2)Shift参数B2
B1b0B0为1:按下了Shift键B1为1:按下了Ctrl键B2为1:按下了Alt键例如:Button为2(010B),即B1为1,表示仅按下了Shift键;如果同时按了Ctrl和Shift键,则B0和B1为1,B2为0
,Button为3(011B)注意:可能同时按下两个或三个键。如果Button<>1成立,并不表示没有按下Shift,因为可能其它键也被按下了。如果要测试按下了某个键,则应用and进行位运算。例如:Buttonand1成立,表示肯定按下了Shift(可能其它键也被按下了)。IfS
hift=1andButton=2Then…‘这是仅按住Ctrl了健单击鼠标后执行的代码…EndIf思考:Shift=1andButtonand2表示什么意义?2022年11月12日星期六兰州理工大学计算机与通信学院419符
号常数:1—vbShiftMask2—vbCtrlMask4—vbAltMaskShfitAndvbCtrlMask为真:按下了Ctrl键CBool(ShiftAndvbCtrlMask)OrCBool(Sh
iftAndvbShiftMask)为真:按下了Ctrl键和Shift键(3)x,y:鼠标的当前位置例7.13显示鼠标器指针所指的位置例7.14画圆程序按下鼠标右键画园,按下鼠标左键移动时画线。在画线时用note14.ico作为鼠标的指针。2022年11月12日星期六兰州
理工大学计算机与通信学院4202.键盘事件KeyPress事件过程SubForm_KeyPress(KeyAsciiAsInteger)Subobject_KeyPress([indexAsInteger,]KeyAsciiAsInteger)KeyDown事件
过程SubForm_KeyDown(keycodeAsInteger,shiftAsInteger)Subobject_KeyDown([indexAsInteger,]keycodeAsInteger,shi
ftAsInteger)KeyUp和KeyDown事件过程SubForm_KeyUp(keycodeAsInteger,shiftAsInteger)Subobject_KeyUp([indexAsI
nteger,]keycodeAsInteger,shiftAsInteger)参数说明Shift与鼠标事件过程Shift相同KeyCode:键盘扫描码KeyAscii:字符ASCII码2022年11月12日星期六兰州
理工大学计算机与通信学院421KeyPressKeyDown和KeyUp事件发生的时间输入一个ASCII字符按任意一个键参数值KeyAscii接收到字符的ASCII值KeyCode接收到键的扫描码按Shift+A时事件发生的次数
事件发生一次事件发生两次按Shift+A时参数值(键盘处于大写状态)97第一次是17第二次是65按Shift+A时参数值(键盘处于小写状态)65第一次是17第二次是65区别:2022年11月12日星期六兰州理工大学计算
机与通信学院422窗体的:KeyPressKeyDownKeyUp控件的:KeyPressKeyDownKeyUp窗体的KeyPreview为True焦点在控件上输入SubForm_KeyPress(KeyAsciiAsInteger)KeyAscii=KeyAscii+1EndSu
bSubText1_KeyPress(KeyAsciiAsInteger)KeyAscii=KeyAscii+1EndSub假定窗体KeyPreview为True,并有下面事件过程,则当文本框中输入“1”
时,实际上是得到的是“3”?窗体KeyPreview为False时在文本框中输入“1”时,实际上是得到的是什么。在这里作一点修改影响所有控件在这里作一点修改影响一个控件2022年11月12日星期六兰州理工大学计算机与通信学院423对输入的数据进行验证、限制和修改1.修改输入数据。接收大写
字符将KeyPreview设置为True时SubForm_KeyPress(KeyAsciiAsInteger)IfKeyAscii>=Asc("a")AndKeyAscii<=Asc("z")ThenKeyAscii=KeyAscii+Asc("A")-Asc("a")EndIfE
ndSub如果把它改为某个控件的事件过程,效果一样吗?2.限制数据输入文本框只能接收“0”~“9”的数字字符。SubtxtExample_KeyPress(KeyAsciiAsInteger)IfKeyAscii<48OrKeyAscii>57ThenKeyA
scii=0EndIfEndSub2022年11月12日星期六兰州理工大学计算机与通信学院424例7.15编写一个程序,当按下Alt+F5时终止程序的运行。'先把窗体的KeyPreview设置为True,再编写如下的程序:SubForm_KeyDown(KeyCodeAsIntege
r,ShiftAsInteger)'按下Alt键时,Shift的值为4If(KeyCode=vbKeyF5)And(Shift=4)ThenEndEndIfEndSub2022年11月12日星期六兰州理工大学计算机与通信学院425例7.16“锤打红心”游戏(1)我们利用上
、下、左、右四个箭头键控制“铁锤”“”:37(&H25)“”:38(&H26)“”:39(&H27)“”:40(&H28)(2)如果Abs(Image1.Left-Image2.left<300)AndAbs(Image1.Top-Image2.Top<320)成立,则认为是重叠,“铁锤”
锤打到“红心”。(3)在窗体上的时钟控件(Timer1)过程中控制“红心”移动。Timer1的Interval属性为200,即每1秒产生5个Timer事件。Image2Image12022年11月12日星期六
兰州理工大学计算机与通信学院4263.拖放自动拖放手工拖放2022年11月12日星期六兰州理工大学计算机与通信学院4271.DragMode属性0:(缺省),手工拖动模式1:自动拖动模式2.DragIcon属性拖动过程中显示的图标(Ico或Cur文件)。lblExample1.DragIco
n=LoadPicture("C:\Icons\Mail.ico")lblExample2.DragIcon=picIcon.Picture3.Drag方法当DragMode为0时,需用Drag方法启动拖放[控件名称.]Dra
g参数0:开始拖放操作1(省略):结束拖放操作2:取消拖放操作2022年11月12日星期六兰州理工大学计算机与通信学院428例7.17拖放应用示例例7.18拖放应用示例2022年11月12日星期六兰州理工大学计算机与通信学院429例7.19九宫游戏制作9×9的九宫界面设计先定制一个控件数组元素
lblGrid(0),在运行时通过控件数组的特性生成其它元素拖放时实现源标签与目标标签的交换2022年11月12日星期六兰州理工大学计算机与通信学院4304.OLE拖放OLEDragMode属性(源控件设置)0----Manual:缺省,手工1----Automat
ic:自动OLEDropMode属性(目标控件设置)0----None:缺省,目标控件不接受“放”1----Manual:手工实现“放”操作。2----Automatic:自动实现“放”完全支持自动OLE拖放:PictureBoxImageTextBox。示例支持自动“拖”操作,不支持自动“放
”:ComboBoxFileListBoxDirListBox和ListBox。示例只支持OLE拖放事件的控件有:CheckBoxFrameOptionButton、LabelDriveListBoxCommandButton2022年11月12日星期六兰州理工大学计算机与通信学院43
1例7.20从Windows资源管理器把文件的文件名拖到标签上SubLabel1_OLEDragDrop(DataAsDataObject,EffectAsLong,_ButtonAsInteger,ShiftAsIn
teger,XAsSingle,YAsSingle)Label1.Caption=Data.Files(1)'在资源管理器中选定文件且拖出时,系统就把所选定的文件名'保存在Data对象的Files属性中,Files属性实质上是一个数组。'Label1.Caption=Data.F
iles(1)语句将保存的第一个文件名显示在标签中EndSubOLEDropMode为1(Manual)2022年11月12日星期六兰州理工大学计算机与通信学院4328.1通用对话框8.2菜单设计8.3多重窗体和多文档界面8.4工具栏和状态栏8.5RichTextBox控件8.6应用程序
向导第八章界面设计(3学时)2022年11月12日星期六兰州理工大学计算机与通信学院4338.1通用对话框(CommonDialog)属性Action:打开通用对话框。DialogTiltle:对通用话框标题。CancelErrorTrue:选择“取消”按钮,出现错误警告;
Err.Number置为32755(cdCancel)。False(缺省):选择“取消”按钮,没有错误警告。工程/部件选定部件标签选定MicrosoftCommDialogControl6.0通用对话框添加到工具箱通用对话框的类型Action方法
打开(Open)1ShowOpen另存为(SaveAs)2ShowSave颜色(Color)3ShowColor字体(Font)4ShowFont打印机(Printer)5ShowPrinter和帮助(Help)6ShowHelp确定打开通用对话框:2022年11月12日星期六兰州理
工大学计算机与通信学院434属性FileName:包含路径FileTitle:不包含路径Filter:例如,Documents(*.DOC)|*.DOC|TextFiles(*.TXT)|*.txt|AllFiles|*.*FilterIndex:决定在文件类型列表框中显示
第几组类型的文件。InitDir:初始化路径1.“打开”文件对话框DialogTiltleFileNameInitDirFilterFilterIndexDefaultExt2022年11月12日星期六兰州理工大学计算机与通信学
院435例8.1简单的文本编辑程序,当按“打开”按钮,在“打开”对话框按“取消”按钮,显示有关信息。OpenCommonDialog1.filenameForInputAs#1DoWhileNotEOF(1)LineInput#1,in
putdatatxtNoteEdit.Text=txtNoteEdit.Text+inputdata+_Chr(13)+Chr(10)LoopClose#12022年11月12日星期六兰州理工大学计算机与通信学院4362.“另存为
”对话框没有提供真正的存储文件操作,仍需要编程完成储存操作。属性DefaultExt:缺省扩展名例8.1中“另存为...”按钮的事件过程3.“颜色”对话框属性Color:返回或设置选定的颜色。例8.1中“颜色...”按钮的事件过程2022
年11月12日星期六兰州理工大学计算机与通信学院4374.“字体”对话框Flags属性:指示所显示的字体类型,必须设置。cdlCFScreenFonts&H1屏幕字体cdlCFPrinterFonts&H2打印机字体cdlCFBoth&H3打印机字
体和屏幕字体。cdlCFEffects&H100显示删除线和下划线检查框以及颜色组合框FontNameFontBold、FontItalicFontSizeFontStrikethruFontUnderlineColorMin、Max例8.1中“字体...”按钮的事件过
程2022年11月12日星期六兰州理工大学计算机与通信学院4385.“打印”对话框属性FromPage:起始页号ToPage:终止页号Copies:打印份数如果打印驱动程序不支持多份打印,该属性有可能始终
返回1。例8.1中“打印...”按钮的事件过程6.“帮助”对话框帮助文件需要用其它的工具制作,如MicrosoftWindowsHelpCompiler。例8.5属性HelpCommand:在线Help帮助类型HelpFile:Help文件的路径及其名称HelpKey:在帮助窗口显示由该帮
助关键字指定的帮助信息。2022年11月12日星期六兰州理工大学计算机与通信学院4398.2菜单的设计菜单形式:主菜单名快捷键热键子菜单标记主菜单条分隔线菜单项子菜单名2022年11月12日星期六兰州理工大学计算机与通信学院440菜单列表框一、菜单编辑器的使用工
具/菜单编辑器(CTRL+E)窗体上快显菜单/菜单编辑器菜单项属性常用属性:1.标题(Caption)热键:前面加&2.名称(Name)文本框分隔符也应有名称。3.快捷键(Shortcut)菜单名没有快捷键
4.复选(Checked)检查框TRUE有✓5.有效(Enabled)检查框6.可见(Visible)检查框操作按钮示例8.6建立一个有菜单功能的文本编辑器。2022年11月12日星期六兰州理工大学计算机与通信学院441二、菜单项增
减在程序运行时,菜单随时增减,如“文件”菜单能保留最近打开的文件数。这同控件数组一样,使用菜单数组。步骤:1.在菜单设计时,加入一个菜单项,其Index为0(菜单数组),Visual为False。2.在程序运行时,通过Load方法向菜单数组增加新的菜单项。例8.7在8.6中的文件菜单中保留
最近打开的文件清单。同样,要删除所建立的菜单项,使用UnLoad方法向菜单数组减少菜单项。2022年11月12日星期六兰州理工大学计算机与通信学院442三、弹出菜单(快捷菜单)显示在窗体的浮动菜单,操作时使用右键,菜单与鼠标位置有关。设计与普通菜单,仅该菜单名不可显示;要显示时使用P
opupMenu方法弹出菜单。形式:[对象.]PopupMenu菜单名,标志,x,y标志,表示弹出的位置和触发的键位置性能0:X位置确定弹出菜单的左边界0只能用鼠标左键触发弹出菜单;4:弹出菜单以X为中心2:能用鼠标左、右键键
触发弹出菜单;8:X位置确定弹出菜单的右边界位置与性能是加的关系。弹出菜单示例SubText1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=2ThenPopupMenuEditMen
u,vbPopupMenuCenterAlignEndSub2022年11月12日星期六兰州理工大学计算机与通信学院4438.3多重窗体和多文档窗体一、多重窗体1.添加窗体“工程|添加窗体”新建现存添加“
现存”窗体时要注意:防止多个窗体的name相同而不能添加;添加的窗体实际是将其它工程中已有的窗体加入,多个工程共享窗体;通过“另存为”命令以不同的窗体文件名保存,断开共享。2.保存窗体一个工程中有多个窗体,应分别取不同的文件名保存在磁盘上,VBP工程文件中记
录了该工程的所有窗体文件名。2022年11月12日星期六兰州理工大学计算机与通信学院4443.设置启动窗体设置启动对象4.窗体语句(1)Load语句:装入窗体到内存但没有显示窗体形式:Load窗体名称(2)Unload语句:从内存删除窗体形式:Unl
oad窗体名称“工程/属性”“启动对象”2022年11月12日星期六兰州理工大学计算机与通信学院4455.窗体方法(1)Show方法:显示一个窗体(当窗体没有Load,自动Load)[窗体名称].Show[模式]0-Modal:关闭才能对其它窗体进
行操作。1-Modeless,可以对其它窗体进行操作。(2)Hide方法:隐藏窗体,没有Unload删除[窗体名称.]Hide6.不同窗体间数据的存取(1)存取控件的属性另一窗体名.控件名.属性(2)存取变量的值另一窗体名.全局变量
名2022年11月12日星期六兰州理工大学计算机与通信学院446例输入和计算学习成绩。模块:PublicMATHAsSinglePublicPHYSICSAsSinglePublicCHEMISTRYAsSinglePublicCHINESEAsSinglePublicENGLIS
HAsSingle2022年11月12日星期六兰州理工大学计算机与通信学院447二、多文档界面(MDI)引例8.81.创建和设计MDI窗体及其子窗体(1)创建和设计MDI窗体创建:“工程/添加MDI窗体”命令标准窗体MDI窗体MDI子窗体(v6b8-1)设计:一般有菜单栏、工具栏、状态栏202
2年11月12日星期六兰州理工大学计算机与通信学院448(2)创建和设计MDI子窗体创建:MDI子窗体是一个MDIChild属性为True的普通窗体。要创建多个子窗体,通过窗体类来实现:PublicSubFil
eNewProc()DimNewDocAsNewfrmMDIChildNo=No+1NewDoc.Caption="no"&NoNewDoc.ShowEndSub设计:可有菜单栏,但必须有文本框。MDI子窗体的Name2022年11月12日星期六兰州理工大学计算机与通信
学院4492.MDI窗体与子窗体的交互(1)活动子窗体和活动控件MDI窗体的两个属性:ActiveForm和ActiveControl例将子窗体的文本框中所选文本复制到剪贴板上:ClipBoard.S
etTextfrmMDI.ActiveForm.ActiveControl.SelText(2)显示MDI窗体及其子窗体显示任何窗体的方法为show,还有有关规则:(1)加载子窗体时,其父窗体会自动加载并显示;反之则无。(2)
MDI窗体有AutoShowChildren属性,决定是否自动显示子窗体(3)维护子窗体的状态信息(4)用QueryUnload卸载MDI窗体2022年11月12日星期六兰州理工大学计算机与通信学院4503.
多文档界面应用程序中的“窗口”菜单(1)显示打开的多个文档窗口要在某个菜单上显示所有打开的子窗体标题,只需利用菜单编辑器将该菜单的WindowList属性设置为True。(2)排列窗口利用Arrange方法进行层叠、平铺和排列图标。形式:MDI窗体对象.Ar
range排列方式排列方式常数值描述vbCascade0层叠所有非最小化vbTileHorizontal1水平平铺所有非最小化vbTileVertical2垂直平铺所有非最小化vbArrangeIcons3重排最小化2022年11月12
日星期六兰州理工大学计算机与通信学院4518.4工具栏和状态栏“MicrosoftWindowsCommonControls6.0”将控件添加到工具箱,通过ToolBar、ImageList组合使用建立工具栏
,步骤:1.在ImageList控件中添加所需的图象2.在ToolBar控件中创建Button对象。3.在ButtonClick事件中用SelectCase语句对各按钮进行相应的编程。一、在ImageList控件中添加图象ImageList控件不单独使用,专门为其
它控件提供图像库.索引(Index)、关键字(Key)在ToolBar中引用图象文件的扩展名为:.ico、.bmp、.gif、.jpg等2022年11月12日星期六兰州理工大学计算机与通信学院452二、在
ToolBar控件中添加按钮1.为工具栏连接图象ToolBar与ImageList的连接工具栏样式2022年11月12日星期六兰州理工大学计算机与通信学院4532.为工具栏增加按钮索引(Index)、关键字(Key)每个按钮的编号、标识,ButtonClick事件中引用;图象(I
mage)ImageList对象中的图象,值可以是Key或Index样式(Style),共6种Style=0Style=3Style=4Style=1Style=2除菜单按钮(5)外的5种样式2022年11月12日星期六兰州理工大学计算机与通信学院454三、响应ToolBar
控件事件ToolBar控件常用的事件有两个:ButtonClick和ButtonMenuClick。前者对按钮样式为0-2,后者对样式为5的菜单按钮。(1)用索引Index确定按钮(2)用关键字Key确定
按钮PrivateSubToolbar1_ButtonClick(ByvalButtonAsComctlLib.Button)SelectCaseButton.IndexCase1FileNewProcCase2FileOpenProc……EndSelectEndSub注意:第1个按
钮的Index值为1。用Index还是用Key比较,Key可读性好,可维护性好。SelectCaseButton.KeyCase"TNew"FileNewProcCase"TOpen"FileOpenProc.....2022年11
月12日星期六兰州理工大学计算机与通信学院455四、状态栏状态栏显示系统信息和对用户的提示,如:系统日期、软件版本、光标的当前位置、键盘的状态等。一般在窗口的底部。1.建立状态栏可插入图象显示的文本样式2022年
11月12日星期六兰州理工大学计算机与通信学院4568.5RichTextBox控件RichTextBox控件可以输入和编辑文本,还可以实现多种文字格式、段落等的设置,还可以插入图形的功能,可真正构成一个象Word一样的字处理软件。选择“MicrosoftRichTextBoxControls6.
0”将控件添加到工具箱。1.文件操作方法(1)LoadFile方法LoadFile方法能够将RTF文件或文本文件装入控件,其形式如下:对象.LoadFile文件标识符[,文件类型]文件类型:0或rtfRTF为RTF文件(缺省);1或rtfTEXT为文本文件(2)Save
File方法SaveFile方法将控件中的文档保存为RTF文件或文本文件,其形式:对象.SaveFile(文件标识符[,文件类型])2022年11月12日星期六兰州理工大学计算机与通信学院4572.常用格式化属性格式化属性,可对该控件
中选中的任何部分的文本使用不同的格式。分类属性值类型说明选中文本SelTextSelStartSelLength意义同Text控件对应属性字体、字号SelFontNameSelFontSize同上字型SelBoldSelItalicSelUnderl
ineSelStrikethru逻辑量粗体斜体下划线删除线上、下标SelCharOffset整型>0上标<0下标以Twip为单位颜色SelColor整型缩排SelIndentelRightIndentSel
HangingIndent数值型缩排单位以ScalMode决定对齐方式SelAlignment整型0左1右2中2022年11月12日星期六兰州理工大学计算机与通信学院4583.应用例8.8字号、字型和对齐4.插入图象在RichTextBox控件中可插入(
*.bmp)的图象文件,形式如下:对象.OLEObjects.Add[索引],[关键字],文件标识符其中:OLEObjects是集合,包含一组添加到RichTextBox控件的对象;索引和关键字表示添加的元素编号和标识,可省,但逗号不能省。例如:RichTextBox1.OLEObjects
.Add,,"c:\windows\circles.bmp"2022年11月12日星期六兰州理工大学计算机与通信学院4598.5应用程序向导是方便的程序生成器,用来生成一个应用程序的界面。选择“文件/新建工程”命令,在其对话框选中“VB应用程序向导”。
1.选择操作界面,有三种:2022年11月12日星期六兰州理工大学计算机与通信学院4602.选取菜单和菜单项向导提供了文件、编辑、视图、工具、窗口、帮助六个菜单名,每个菜单名下有若干个菜单项。用户可自由地选取、取消菜单名或菜单项。2022年11月12日星期六兰州理工大学计算机与通信学院461
3.选取工具栏按钮提供的工具栏有13个按钮。用户也可根据需要增加(右移所选按钮)或删除(左移所选按钮)按钮。2022年11月12日星期六兰州理工大学计算机与通信学院462第九章文件(2学时)9.1文件系统控件9.2文件的读写9.3常用的文件操作语句和函数2022年11月12日星期六兰州理工大学
计算机与通信学院4639.1驱动器、目录和文件列表框SubdrvDrive_Change()dirDirectory.Path=drvDrive.DriveEndSubSubdirDirectory_Change()filFile.Pa
th=dirDirectory.PathEndSubSubForm_Load()Item=“所有文件(*.*)”cboType.AddItemItem+Space(20-Len(Item))+"*.*"Item="
窗体文件(*.FRM)"cboType.AddItemItem+Space(20-Len(Item))+"*.FRM"Item="位图文件(*.BMP)"cboType.AddItemItem+Space(20-Len(I
tem))+"*.BMP"cboType.ListIndex=2EndSubSubcboType_Click()filFile.Pattern=Mid(cboType.Text,21)EndSubSubfilFile_Click()┆EndSubSubfilFile
_DblClick()┆EndSub例9.1示例程序2022年11月12日星期六兰州理工大学计算机与通信学院4641.驱动器列表框Drive属性:[对象.]Drive[=drive]Change事件:重新设置Drive属性引发Change事件2.
目录列表框Path属性:[对象.]Path[=pathname]Change事件:重新设置Path属性引发Change事件2022年11月12日星期六兰州理工大学计算机与通信学院4653.文件列表框Path属性:显示该路径下的文件。重新设置Pa
th属性引发PathChange事件。Pattern属性:显示的文件类型。[对象.]Pattern[=value]重新设置Pattern属性引发PatternChange事件。例如:filFile.Patte
rn=“*.frm”,显示*.frm文件。FileName属性:[对象.]FileName[=pathname]引用时只返回文件名,相当于filFile.List(filFile.ListIndex),需用Path属
性得到其路径;设置时可带路径。Click、DblClick事件:例如,单击输出文件名。例如,双击执行可执行程序。SubfilFile_Click()SubfilFile_DblClick()MsgBoxf
ilFile.FileNameChDir(dirDirectory.Path)’改变当前目录EndSubRetVal=Shell(filFile.FileName,1)’执行程序EndSub2022年11月12日星期六兰州理工大学计算机与通信学院4669
.2文件的读写文件:存储在外部介质上数据的集合。按名存取1.记录由若干个相互关联的数据项组成。例如,由学生的学习成绩信息组成的记录:学号姓名数学成绩语文成绩物理成绩总分数据项2.文件及其种类文件是记录的集合顺序访问模式:顺序文件,记录可长可短随机访问模式:随机文件,记录的长度相同二进制访问模
式:二进制文件(可认为记录长度为1)2022年11月12日星期六兰州理工大学计算机与通信学院467(1)顺序文件按顺序依次把记录写入文件;按顺序依次把记录读出来。记录1记录2……记录N文件结束标志文本文件:一行一条记录,记录可长可短,以“换行”字符为分隔符号。(2)随机文件随机文件可
以直接访问文件中的任意一个记录。记录长度相同根据记录号访问#1记录1#2记录2……#N记录N(3)二进制文件直接把二进制码存放在文件中。2022年11月12日星期六兰州理工大学计算机与通信学院4681.打开文件Open“文件名”[For模
式]As[#]文件号[Len=记录长度](1)模式OUTPUT:写操作INPUT:读操作APPEND:追加到文件未尾(2)文件号1~511,可以用FreeFile函数获得下一个可利用的文件号。(3)记录长度小于或等于327
67的整数,它指定数据缓冲区的大小。例如,打开C:\VB\SCORE,供写入数据,指定文件号为#1。OPEN"C:\VB\SCORE"FOROUTPUTAS#1一、顺序访问模式打开文件读出或写入关闭文件2022年11月12日星期六兰州理工大学计算机与通信学
院4692.写入命令Print#文件号,[输出列表]保存文本框假定文本框的名称为txtTest,文件名为TEST.DAT。方法1:把整个文本框的内容一次性地写入文件。Open"TEST.DAT"ForOutputAs#1Print#1,txtTest.TextClose#1方法2:把整
个文本框的内容一个字符一个字符地写入文件。Open"TEST.DAT"ForOutputAs#1Fori=1Tolen(txtTest.Text)Print#1,Mid(txtTest.Text,i,1);NextiClose#1Write#文件号,[输出
列表]紧凑格式。数据项之间插入“,”,并加上双引号。例如,命令:Write#1,"One","Two",123内容:"One","Two",1232022年11月12日星期六兰州理工大学计算机与通信学院4703.关闭文件Close[[#]文件号][,[#
]文件号]...例如,Close#1,#2,#34.读顺序文件INPUT#文件号,变量列表把读出的每个数据项分别存放到所对应的变量。LINEINPUT#文件号,字符串变量读一行到变量中,主要用来读取文本文件。INPUT$(读取字符数,#文件号)随意读取字符5
.函数LOF(文件号):返回文件的长度(总字节数)。EOF(文件号):返回读写位置。文件未尾时,EOF函数为True,否则为False。2022年11月12日星期六兰州理工大学计算机与通信学院471读文本文件到文本框(共三种方法)
假定文本框名称为txtTest,文件名为MYFILE.TXT。方法1:一行一行读txtTest.Text=""Open"MYFILE.TXT"ForInputAs#1DoWhileNotEOF(1)LineInput#1,InputDatatxtTest.Text=t
xtTest.Text+InputData+vbCrLfLoopClose#1方法2:一次性读txtTest.Text=""Open"MYFILE.TXT"ForInputAs#1txtTest.Text=Input(LOF(1),1)Close#12022年11月12
日星期六兰州理工大学计算机与通信学院472方法3:一个个字符读DimInputDataasString*1txtTest.Text=""Open"MYFILE.TXT"ForInputAs#1DoWhileNotEOF(1)InputData=Input(1,#1
)txtTest.Text=txtTest.Text+InputDataLoopClose#12022年11月12日星期六兰州理工大学计算机与通信学院473例9.3文件加密程序SubcmdOpen_Click()CommonD
ialog1.Action=1txtSource.Text=""OpenCommonDialog1.FileNameForInputAs#1DoWhileNotEOF(1)LineInput#1,InputDatatxtSource.Text=txtSource.Text+Input
Data+vbCrLfLoopClose#1EndSubSubcmdSave_Click()CommonDialog1.Action=2OpenCommonDialog1.FileNameForOutputAs#1Print#1,txtTarget.Te
xtClose#1EndSubtxtTargettxtSource参阅例3.262022年11月12日星期六兰州理工大学计算机与通信学院474二、随机文件1.打开Open"文件名"ForRandomAs#
文件号[Len=记录长度]2.写操作Put[#]文件号,[记录号],变量名将一个记录变量的内容写到指定的记录位置处。忽略记录号,则表示在当前记录后的位置插入一条记录。3.读操作Get[#]文件号,[记录号],变量名忽略记录号,则读出当前记录后的那一条记录。例9
.4学生信息管理程序。追加记录(Command1):将一个学生的信息作为一条记录添加到随机文件末尾。显示记录(cmdDisplay):显示在右边文本框(text4)中指定的记录。2022年11月12日星期六兰州理工大
学计算机与通信学院4751.打开Open"文件名"ForBinaryAs#文件号2.写操作Put[#]文件号,[位置],变量名写入长度等于变量长度的数据。3.读操作GET[#]文件号,[位置],变量名从指定位置开始读出长度等于变量长度的数据存入变量中,数据读出后移动变量长
度位置,如果忽略位置,则表示从文件指针所指的位置开始读出数据,数据读出后移动变量长度位置。三、二进制文件2022年11月12日星期六兰州理工大学计算机与通信学院476例9.5文件复制DimcharAsByteDimFileNum1,File
Num2asIntegerFileNum1=FreeFile'打开源文件Open"C:\STUDENT.DAT"ForBinaryAs#FileNum1FileNum2=FreeFile'打开目标文件Open"C:\STUDENT.BAK"ForBinaryAs#FileNum2Do
WhileNotEOF(FileNum1)'从源文件读出一个字节Get#1,,char'将一个字节写入目标文件Put#2,,charLoopClose#FileNum1Close#FileNum22022年11月12日星期六兰州理工大学计算机与通信学院4779.3常用的文件操作语句和函数1.Fi
leCopy语句格式:FileCopysource,destination功能:复制一个文件。说明:FileCopy语句不能复制一个已打开的文件。2.Kill语句格式:Killpathname功能:删除文件。说明:pathname中可以使用统配符“*”和“?”。例如:Kill
"*.TXT"3.Name语句格式:NameoldpathnameAsnewpathname功能:重新命名一个文件或目录。说明:(1)Name具有移动文件的功能。(2)不能使用统配符“*”和“?”,不能对一个已打开的文件上使用N
ame语句。2022年11月12日星期六兰州理工大学计算机与通信学院4784.ChDrive语句格式:ChDrivedrive功能:改变当前驱动器。说明:如果drive为“”,则当前驱动器将不会改变;如果drive中有多个字符,则ChDrive只会使用首字母。5.MkDir语句格式:MkDi
rpath功能:创建一个新的目录。6.ChDir语句格式:ChDirpath功能:改变当前目录。例如:ChDir"D:\TMP"7.RmDir语句格式:RmDirpath功能:删除一个存在的目录。说明:只能删除空目录。8.CurDir函数格式:C
urDir[(drive)]功能:利用CurDir函数可以确定任何一个驱动器的当前目录。说明:drive为“”,则CurDir返回当前驱动器的当前目录。2022年11月12日星期六兰州理工大学计算机与通信学院479例9.6利用ChDrive和ChDir语句改写例9.1中的
File1_DblClick()事件过程。SubFile1_DblClick()ChDriveDrive1.Drive'设置缺省驱动器ChDirFile1.Path'设置缺省目录RetVal=Shell(File1.FileName,1)EndS
ub例9.7为例9.1添加事件过程File1_MouseDown(),使之支持Del键,即按下Del键删除选定的文件。SubFile1_KeyDown(KeyCodeAsInteger,ShiftAsInteger)IfKeyCode=vbKeyD
eleteThenChDriveDrive1.DriveChDirFile1.PathKillFile1.FileNameFile1.Refresh'文件删除后更新文件列表框EndIfEndSub2022年11月12日星期六兰州理工大学计算机与通信学院480第十
章图形操作(3学时)10.1图形操作基础10.2绘图属性10.3图形控件10.4图形方法*10.5应用2022年11月12日星期六兰州理工大学计算机与通信学院48110.1图形操作基础10.1.1坐标系
统每个容器都有一个坐标系,构成一个坐标系,需要三个要素:坐标原点、坐标度量单位、坐标轴的长度与方向。坐标度量单位由容器对象的ScaleMode属性决定。缺省时为Twip。每英寸1440个Twip,20个Twi
p为一磅。原点HeightScaleHeight2022年11月12日星期六兰州理工大学计算机与通信学院48210.1.2自行定义坐标系方法一:通过ScaleTop,ScaleLeft,ScaleWidth和ScaleHeight属性实现。(ScaleTop,Scale
Left)例10.1在Form_Paint事件中定义窗体的坐标系。2022年11月12日星期六兰州理工大学计算机与通信学院483方法二:采用Scale方法来设置坐标系:[对象.]Scale[(xLeft,yTop)-(xRight,yBotton)]例如,Form1.
Scale(-200,250)-(300,-150)将建立和例10.1一样的坐标系。可在程序中使用Scale方法改变坐标系统。当Scale方法不带参数时,取消用户定义的坐标系,采用缺省坐标系。改变坐标系后产生的影响:(xLeft,yTop)(xRight,yBotton)例10.1aLine(0,
0)-(1000,1000)在不同坐标系的效果例10.1b控件对象在坐标系内与X轴和Y轴的位置保持相对不变2022年11月12日星期六兰州理工大学计算机与通信学院484利用图形层的特点,实现悬浮效果。在命令按钮后放置一个表面色彩为黑色的标签即。同一图形层内控
件对象排列顺序称为Z序列。Zorder方法的语法为:对象.Zorder[position]position=0表示该控件被定位于Z序列的前面position=1表示该控件被定位于Z序列的后面例Zorder方法的使用。10.1.3图形层三个图形层放
置的对象层次对象类型最上层工具箱中除标签、线条、形状外的空件对象中间层工具箱中标签、线条、形状空件对象最下层由图形方法所绘制的图形2022年11月12日星期六兰州理工大学计算机与通信学院48510.2绘图属性10.2.1当前坐标CurrentX,Current
Y属性给出窗体或图形框或打印机在绘图时的当前坐标。这两个属性在设计阶段不能使用。例10.2利用CurrentX,CurrentY属性在窗体上输出立体字效果。10.2.2线宽与线型窗体、图形框或打印机的DrawWidth属性给出这些对象上所画线的宽度或点的大小。DrawW
idth属性以像素为单位来度量,最小值为1。例10.3用DrawWidth属性改变直线宽度。2022年11月12日星期六兰州理工大学计算机与通信学院486窗体或图形框或打印机的DrawStyle属性给出这些对象上所画线的形状。设置值线型图示0实线(缺省)1长
划线2点线3点划线4点点划线5透明线6内实线10.2.3填充与色彩2022年11月12日星期六兰州理工大学计算机与通信学院487VisualBasic默认采用对象的前景色(ForeColor属性)绘图,也可以通过以下颜色函数指定
色彩。1.RGB(红,绿,蓝)函数红、绿、蓝三基色使用0—255之间的整数。2.QBColor(颜色码)颜色码使用0—15之间的整数10.3图形控件10.3.1PictureBox(图形框)主要作用:显示图片、也可作为其他控件的容器
。装入图形:图形框对象.Picture=LoadPicture(“图形文件名”)删除图形:图形框对象.Picture=LoadPicture()Autosize属性设置为True时,图形框能自动调整大小与
显示的图片匹配例10.4颜色的渐变过程。2022年11月12日星期六兰州理工大学计算机与通信学院48810.3.2Image(图像框)图像框比图形框占用更少的内存快。图像框内不能保存其他控件。Stretch属性
=False,图像框可自动改变大小以适应其中的图形。Stretch属性=True,图形可自动调整尺寸以适应图像框的大小。例10.5图形框Autosize属性与图像框的Stretch属性对加载图形的影响。SavePicture对象名.属性,文件名把绘制或装在窗体、图形框和图像框内的图
形保存到Bmp格式文件内。10.3.3Line(画线工具)10.3.4Shape(形状)例10.6例10.72022年11月12日星期六兰州理工大学计算机与通信学院48910.4图形方法10.4.1Line方法画直线或矩形:[对象.]Li
ne[[Step](x1,y1)]-(x2,y2)[,颜色][,B[F]]其中:对象可以是窗体或图形框。(x1,y1),(x2,y2)为线段的起终点坐标或矩形的左上角右下坐标。关键字B表示画矩形,关键字F表示用画矩形的颜色来填充矩形。例10.8用Line方法在一个窗体上画坐标轴与坐
标刻度。例10.9用Line方法在一个窗体上画随机射线。10.4.2Circle方法Circle方法用于画圆、椭圆、圆弧和扇形。2022年11月12日星期六兰州理工大学计算机与通信学院49010.4.3Pset方法Pset方法用于画点:[对象.]Pset[Ste
p](x,y)[,颜色]参数(x,y)为所画点的坐标,关键字Step表示采用当前作图位置的相对值。例10.10本例用Pset方法绘制阿基米德螺线10.4.4Point方法Point方法用于返回指定点的RGB颜色,其
语法格式如下:[对象.]Point(x,y)其中参数对象与(x,y)的意义与前述相同。例10.11用Point方法获取一个区域的信息。利用例10.11的处理方法可使图片产生朦胧的效果。2022年11月12日星期六兰州理工大学计算机与通信学院
49110.5应用10.5.1几何图形绘制利用Line方法和Circle方法及DrawWidth、DrawStyle和DrawMode属性。例10.12用Circle方法在窗体上绘制由圆环构成的艺术图案。算法:等分半径为r的圆周为
n份,以等分点为圆心,半径r1绘制n个圆。例10.13为了能绘制任意区间[a,b]上函数f(x)积分面积图,可在窗体上放置一个图形框和两个文本框。文本框用于指定积分上下限的值,图形框用于绘图。根据区间[a,b]的值设置图
形框的左上角坐标为(a-1,bb+1),右下角坐标为(b+1,-1)。将区间[a,b]等分为n份,在每一等分点i上,用Line方法连线到(i,i*i)。2022年11月12日星期六兰州理工大学计算机与通信学院49210.5.2简单动画设计动画:有计划地移动一个对象包
括改变对象的形状和尺寸。编程时可以采用帧动画原理,即通过一系列静态图辅之以连续快速变化产生动画效果,也可以通过Move方法改变图形对象的Top及Left属性来移动图形。动画的速度使用时钟控制。例10.14通过改变图形形状演示一个陀螺在图形框内转动。例10.15演示地球图标
的转动,在转动时同时使地球图标在窗体内移动,并变化地球图标的尺寸。(用PictureClip控件来存放一组图片)10.5.3图形漫游滚动图形通过滚动条的滑块移动,只要设置图形框的Left或Top为滑块当前值的负数,就可形成图形相对移动。例1
0.16本例在窗体内显示一幅地图,移动滚动条漫游地图。2022年11月12日星期六兰州理工大学计算机与通信学院49310.5.4图形处理技术1.操作象素通过PaintPicture方法访问内置在操作系统中的BitBlt服务程序。dpic
.PaintPicturespic,dx,dy,dw,dh,sx,sy,sw,sh,rop其中:参数dpic为目标图形对象,spic为传送源,dx,dy是传送目标矩形区域左上角坐标(目标控件内任一位置)。dw
,dh是目标形矩形区域的宽和高。sx,sy是要传送图形矩形区域左上角坐标。sw,sh是要传送图形矩形区域的大小。rop指定传送的象素与目标中现有的象素组合模式(如表所示)。常量数值说明vbDstInvert&H00055009逆转目标位图vbNotSrcCopy&H00330008
复制源位图的逆到目标位图vbSrcCopy&H00cc0020复制源位图的到目标位图vbSrcInvert&H00660046用XOR组合源位图与目标位图2022年11月12日星期六兰州理工大学计算机与通信学院494传送源目标PaintPicture方法(sx,s
y)swdpic.PaintPicturespic,dx,dy,dw,dh,sx,sy,sw,sh,ropdw,dhsw,sh至少8个Twip(dx,dy)dwdhsh2022年11月12日星期六兰州理工大学计算机与通信学院495复制图形:设置目标区域左上角
坐标和大小与源矩形区域相同。翻转图形:只需改变坐标系,设置图形宽为负数,则水平翻转图形;图形高度为负数,则上下翻转图形;如果宽度和高度都为负数,则两个方向翻转图形。放大图形:改变目标图形的宽度和高度。旋转图形:要需要对原始图片按行和列的顺序或按列和行的顺序扫描象素点,然
后在目标图形区颠倒行和列的顺序复制象素点。例10.17PaintPicture方法翻转放大位图。例10.17a本例使用PaintPicture方法实现百叶窗效果。2使用DrawMode属性绘制图形DrawMode属性可以将新象素与原有象素用不同的方法组合。两次Xor运算恢复原有象素。例
10.18用鼠标选定图形中的区域复制到指定的图片框。例10.18a在Xor运算符下图形叠加的效果。2022年11月12日星期六兰州理工大学计算机与通信学院49610.5.5改变窗体对象外观通过调用Windows的API函数可改变窗体的外观形状。VB应用程序
要访问API函数,必须在VB应用程序中用Declare语句将API函数声明为外部过程。Declare语句将API函数声明为外部过程VisualBasic应用程序2022年11月12日星期六兰州理工大学计算机与通信学院497执行VB程序组中的API文本浏览器,启动API函
数查看工具。单击“文件|加载文本文件”命令,装入Win32api.Txt文件。通过“工程/添加模块”在当前工程内加入一个BAS模块文件。添加指定的API函数到选定项框中,并将函数声明复制到剪贴板。将剪贴板中的内容粘贴到BAS模块文件中。将API函数声明为外部过程,操作流程如下:20
22年11月12日星期六兰州理工大学计算机与通信学院498API文本浏览器应用程序文件/加载文本文件2022年11月12日星期六兰州理工大学计算机与通信学院4991。选择信息类型2。选定选定API函数复制到剪贴板2022年11月12日星期六兰州理工大学计算机与通信学院500例10.
19建立一个椭圆形状的窗体。API函数CreateEllipticRgn建立椭圆外形区域,SetWindowRgn显示该区域。SetWindowRgn函数参数说明:hWnd窗口句柄,hRgn为窗口形状,bRedraw图形重绘控制,为一逻辑值。句柄
(Handle)可看作一个对象的指针,通过它可访问该对象。可通过API函数或对象的属性返回句柄。使用API的区域设置函数不仅可以改变窗体外观,也可以改变控件外观。CreateEllipticRgn函数参数说明:坐标参数采用象数值。实际显示的窗体区域由窗体
的Height、Width属性确定。需要使用ScaleX和ScaleY方法对窗体的度量单位进行转换。(x1,y1)(x2,y2)2022年11月12日星期六兰州理工大学计算机与通信学院50110.5.6在程序中加入后台音乐API函数sndPlaySound可以直接播放音频文件或系统声音
。sndPlaySound函数有两个参数,lpszSoundName指定播放的音频文件或系统声音,uFlags设定播放状态。例10.20本例示范用sndPlaySound函数播放音频文件。调用形式:k=sn
dPlaySound(音频文件名,播放方式)播放文件为空,就可停止音乐播放注:本例要求有多媒体设备uFlags设置uFlags设置说明SND_SYNC&H00同步播放SND_ASYNC&H01非同步播放SND_NODEFAULT&H02找不到指定的语音文件时也不播放预设的声音SN
D_LOOP&H08重复播放SND_NOSTOP&H10不要停止其他正在播放的语音2022年11月12日星期六兰州理工大学计算机与通信学院502第十一章VisualBasic与数据库(2学时)11.1数据库概念
11.2数据库管理器11.3数据控件*11.4ADO数据控件*11.5结构化查询语言(SQL)*11.6报表制作11.7错误处理2022年11月12日星期六兰州理工大学计算机与通信学院50311.1数
据库概念数据库表数据库就是一组排列成易于处理和读取的相关信息的集合。关系模型已经成为数据库设计事实上的标准。2022年11月12日星期六兰州理工大学计算机与通信学院504关系型数据库模型学号姓名性别专业出生年月990001万林男物理82-1-21
990002庄前女物理82-9-21990101丁保华男数学82-4-4990102姜沛棋女数学81-12-2990103朱克良男数学82-10-1990201程玲女计算机82-11-14990202黎敏艳女计算机83-2-21991103章万京男电气82-6-3991104陈友良男电气83
-5-5记录字段主键按学号索引2022年11月12日星期六兰州理工大学计算机与通信学院505一个数据库可以由多个表组成,表与表之间可以用不同的方式相互关联。若第一个表中的一条记录内容与第二个表中多条记录的数据相符,但第二个表中的一条记录只能与第一个表的一条记录的数据相符,这样的
表间关系类型叫做一对多关系。若第一个表的一条记录的数据内容可与第二个表的多条记录的数据相符,反之亦然,这样的表间关系类型叫做多对多关系。基本情况表学生成绩表学号姓名学号课程成绩990001万林990001数学85990002庄前990001外语90……………一对多关系2022年11月12日星期六
兰州理工大学计算机与通信学院506可以将一个或几个表中的数据构成记录集Recordset对象,记录集也由行和列构成,它与表类似。学号课程成绩990001数学85学号姓名性别专业出生日期990001万林男物理82-1-11990002庄前女物理82-9-21。。。。。。。。。。。。。。。(表一)
数据库记录集学号姓名专业课程成绩990001万林物理数学85990002庄前物理外语90。。。。。。。。。。。。。。2022年11月12日星期六兰州理工大学计算机与通信学院507在VB中数据库内的表格不允许直接访问,而只能通过记录集对象进行记录的操作和
浏览,因此,记录集是一种浏览数据库的工具。数据库记录集记录集类型说明Table是表格直接显示的数据。它比其他类型记录集处理速度快,内存开销较大。Dynaset一个或者几个表中的记录的引用,动态集和产生动态集的基本表可以互相更新。是最灵活的,功能最强的记录集。Sna
pShot数据库一瞬间的状态,显示的数据是静态、只读状态,内存开销最少。2022年11月12日星期六兰州理工大学计算机与通信学院50811.2数据库管理器VB的数据库管理器(Visdata.exe)可用于管理数据库。在VB开发环境内单击外接程序菜单中的可视化数据管理器命令可打开可视数据管
理器。2022年11月12日星期六兰州理工大学计算机与通信学院509数据库管理器使用小结:1.建立新表:鼠标右键单击数据库窗口,弹出菜单,选择对应命令。2.打开、删除表,修改表结构和建立表间的关联等操作:右键单击数据库窗口内的表名,弹出菜单,选择对应命令。3
.编辑记录:双击表名,打开表格输入窗,编辑、增删记录。字段名类型宽度字段名类型宽度学号Text6专业Text10姓名Text10出生年月Date8性别Text2照片Binary建立Student.mdb数据库,所含学生基本情况表结构如下:2022年11月1
2日星期六兰州理工大学计算机与通信学院51011.3数据控件工具箱内数据控件图标形状画在窗体上的外观11.3.1数据控件注:RecordSource属性可以是数据库中的单个表名,也可以是使用SQL查询语言的一个查询字符串。如果连接的是单表数据库,则DatabaseName属性应设置为数据库文件所在
的子目录名,而具体文件名放在RecordSource属性中。能够利用三种记录集对象访问数据库中的数据,连接方法:连接属性Data控件属性说明Connect指定数据控件所要连接的数据库类型。DatabaseName指定具体使用的数据库文件名,包括所有的路径名。RecordSource确
定具体可访问的数据,这些数据构成记录集对象。RecordType确定记录集类型。2022年11月12日星期六兰州理工大学计算机与通信学院511数据库记录集绑定控件姓名庄前性别女数据控件只能连接数据库产生记录集,不能显示记录集
中的数据,要显示记录集中的数据必须通过能与它绑定的控件来实现。常用绑定控件2022年11月12日星期六兰州理工大学计算机与通信学院512绑定控件具有DataSource和DataField两个重要属性,其作用如下:属性绑定控件绑定属性说明DataSource指定一个有效的数据控件连接到数据库
上。DataField设置数据库有效的字段与绑定控件建立联系。Data控件、记录集与绑定控件记录集学号姓名专业课程成绩990001万林物理数学85990002庄前物理外语90。。。。。。。。。。。。。。数据库2022年11月12日星期六兰州理工大学计算机与通信学院513例1
1.2用一个数据网格控件MsFlexGrid显示Student.mdb数据库中基本情况表的内容。例11.1设计一个窗体显示在11.2节中建立的的Student.mdb数据库中基本情况表的内容。属性:Rows、Cols(网格的行或列数)FixedRows、Fix
edCols(不可卷动的行或列数)2022年11月12日星期六兰州理工大学计算机与通信学院51411.3.2数据控件的事件事件说明Reposition发生在一条记录成为当前记录后,这个事件中显示当前指针的位置。Vaildate移动记录指针前、修改与删除记录前或卸载
含有数据控件的窗体时触发该事件。参数Save可判断绑定控件内的数据是否发生变化。2022年11月12日星期六兰州理工大学计算机与通信学院51511.3.3数据控件的常用方法方法说明Refresh激活对数据控件属性的改变,使对数据
库的操作有效。UpdateControls将数据从数据库中重新读到被数据控件绑定的控件内。UpdateRecord将绑定控件内的数据写入到数据库中而不触发数据控件的Vaildate事件。Refresh2022年11月12日星期六兰州理工大学计算机与通信学院51611.3.4记录集的属性与方
法1属性学号姓名专业课程成绩990001万林物理数学85990002庄前物理外语90。。。。。。。。。。。。。。。990010黎明建筑建筑学90EofBofBookMarkRecordCount2022年11月12日星期六兰州理工大学计算机与通信学院5172记录集的方法学号姓名专
业课程成绩990001万林物理数学85990002庄前物理外语90。。。。。。。。。。。。。。。990010黎明建筑建筑学90MoveLastMoveFirstMoveNextMovePrevious•FindFirst、FindLast、FindNext、FindPre
vious方法可在指定的Dynaset或Snapshot类型的记录集对象中查找。•Seek方法在Table表中查找。Nomarch属性可判定是否找到。Data1.Recordset.FindFirst"姓名='黎明'"Nomarch=False例11.3在窗体上用Mo
ve方法代替数据控件对象的4个箭头的操作。2022年11月12日星期六兰州理工大学计算机与通信学院51811.3.5记录的增删改操作学号姓名专业课程成绩990001万林物理数学85990002庄前物理外语90990010黎
明建筑建筑学90Data1.Recordset.AddNew增加记录数据库UpData填入新数据编辑记录删除记录•调用Edit方法。调用Delete方法。•给各字段赋值。移动记录指针。•调用Update方法。例11.4对数据库提供增、删、改和查找功能。20
22年11月12日星期六兰州理工大学计算机与通信学院51911.4ADO数据控件ADO是Microsoft处理数据库信息的最新技术,它是一种ActiveX对象,采用了被称为OLEDB的数据访问模式。它是数据访问对象DAO、远程数据对象RD
O和开放数据库互连ODBC三种方式的扩展。ADO对象模型更为简化,不论是存取本地的还是远程的数据,都提供了统一的接口。11.4.2使用ADO数据控件11.4.1ADO对象模型在使用ADO数据控件前,必须先通过“工程/部件”菜单命令选择“MicrosoftADODataControl6.0(O
LEDB)”选项,将ADO数据控件添加到工具箱。ADO数据控件与VisualBasic的内部数据控件很相似,它允许使用ADO数据控件的基本属性快速地创建与数据库的连接。2022年11月12日星期六兰州理工大学计算机与通信学院520工具箱内ADO控件图标形状画在窗体上的外观能够利用三种记录集对象访问
数据库中的数据,连接方法:ADO控件连接设置连接属性ADO控件属性说明ConnectionString包含了用于与数据源建立连接的相关信息(ADO控件没有DatabaseName属性)。RecordSource确定具体可访
问的数据,这些数据构成记录集对象Recordset。2022年11月12日星期六兰州理工大学计算机与通信学院521连接操作------鼠标右击ADO控件,选择快捷菜单“ADODC属性”命令,打开ADO控件
属性页窗:单击2022年11月12日星期六兰州理工大学计算机与通信学院522选定选定数据库2022年11月12日星期六兰州理工大学计算机与通信学院523选定设置完成后,ADO控件的ConnectionSt
ring属性为:Provider=Microsoft.Jet.OLEDB.3.51;PersistSecurityInfo=False;DataSource=Student.mdbRecordSource属性为:基本情况(表)ADO控件的的其他操作与Data控件相同。2022年11
月12日星期六兰州理工大学计算机与通信学院52411.4.3ADO控件上绑定控件的使用网格控件比较网格控件分类功能说明MSFlexGrid标准不能进行编辑,有图形功能。MSHFlexGridOLEDB不能进行编辑,可分层处理网格,有图形功能
。DataGridOLEDB可以进行编辑操作,显示文本。MSFlexGridMSHFlexGridDataGridMSChartDataComboDataList例11.52022年11月12日星期六兰州理工大学计算机与通信学院52511.4.4使用数据窗体向导通过数据
窗体向导能建立一个访问数据的窗口。在使用前必须执行“外接程序/外接程序管理器”命令,将“VB6数据窗体向导”装入到“外接程序”菜单中。步骤1:执行“外接程序”菜单中的“数据窗体向导”命令2022年11月12日星期六兰州理工大学计算
机与通信学院526步骤2:选择数据库类型。2022年11月12日星期六兰州理工大学计算机与通信学院527数据库步骤3:选择具体的数据库文件。2022年11月12日星期六兰州理工大学计算机与通信学院528步骤4:设置应用窗体的工作特性。2022年11月12日星期六兰州理工大学
计算机与通信学院529步骤5:选择记录源(所需要的实际数据)。2022年11月12日星期六兰州理工大学计算机与通信学院530步骤6:选择所需要的操作按钮。例11.62022年11月12日星期六兰州理工大学计算机与通
信学院53111.5结构化查询语言(SQL)11.5.1结构化查询语言结构化查询语言SQL是操作数据库的工业标准语言。在SQL语言中,指定要做什么而不是怎么做。不需要告诉SQL如何访问数据库,只要告诉SQL需要数据库做什么。利用SQL,可以确切指定想要检索的记录以及按什么顺序检索。可以在设计
或运行时对数据控件使用SQL语句。用户提出一个查询,数据库返回所有与该查询匹配的记录。2022年11月12日星期六兰州理工大学计算机与通信学院532结构化查询语言常用SQL命令描述CREAT创建新的表、字段和索引D
ELETE从数据库表中删除记录。SELECT在数据库中查找满足特定条件的记录。UPDATE改变特定记录和字段的值。常用SQL命令子句描述FROM用来为从其中选定记录的表命名。WHERE用来指定所选记录必须满足的条件。GROUPBY
用来把选定的记录分成特定的组。HAVING用来说明每个组需要满足的条件。ORDERBY用来按特定的次序将记录排序。合计函数描述AVG用来获得特定字段中的值的平均数COUNT用来返回选定记录的个数SUM用来返回特定字段中所有值的总和MAX用来返回指定字段中的最大值MIN用来返回指定字段中
的最小值2022年11月12日星期六兰州理工大学计算机与通信学院53311.5.2使用SELECT语句查询1.使用SELECT语句从数据库中的获取数据称为查询数据库,查询数据库通过使用SELECT语句。常见的SELECT语句形式为:Select字段表From表名Where查询条件GroupB
y分组字段OrderBy字段[Asc|Desc]可以在设计或代码中对数据控件的RecordSource属性设置SQL语句,也可将SQL语句赋予对象变量。在建立SQL语句时,如果需要通过变量构造条件,则需要在应用程序中将变量连接到SELECT语句。例如:"Select*F
rom基本情况Where专业='"&Text1&"'"例11.7将例11.4中的查找功能改用SQL语句处理。例11.8用SQL语句从两个数据表中选择数据构成记录集。例11.9用SQL指令按专业统计Student.mdb数据库各专业的人数。2022年11月12日星期六
兰州理工大学计算机与通信学院534例11.10在ADO数据控件上使用SQL语句。将例11.8中的Data控件改用ADO数据控件,用SQL语句从Student.mdb数据库的两个数据表中选择数据构成记录集。例11.11设计一个窗
体,计算Student.mdb数据库内学生成绩表中每个学生的平均成绩,产生姓名、平均成绩和最低成绩三项数据,按平均成绩升序排列数据,并用该数据作图。*2.使用UPDATE语句修改记录UPDATE创建一
个更新查询来按照某个条件修改特定表中的字段值。其语法如下:UPDATE[表集合]SET[表达式]WHERE[条件]例11.11a本例把学生平均成绩字段的值增加了10%,并刷新网格。*3.使用DELETE语句查询可以创建删除查询来删除FROM子句中列出的、满足WHERE子句的一个或多个表中的记录,其
语法所示如下:DELETE[表字段]FROM[表集合]WHERE[条件]例11.11b删除例11.11a所产生temp表中平均成绩<90的全部记录,并刷新网格。2022年11月12日星期六兰州理工大学计
算机与通信学院535*11.5.3使用对象变量访问数据库DAO对象定义了一个可编程的对象集合。可按下列方法定义数据库对象和记录集对象,不必在窗体上放置数据控件方法说明DimdbAsDatabaseSetdb=Open
Database(数据库)打开数据库,返回一个Database类型的对象db。DimrsAsRecordsetSetrs=db.OpenRecordset(记录源)返回一个记录集对象rs。要想在程序中使用DAO对象,必须先为当前工
程引用DAO对象的数据库引擎库。引用方式:执行工程菜单的引用命令,启动引用对话框,在清单中选取“MicrosoftDAO3.51ObjectLibrary”项目。2022年11月12日星期六兰州理工大学计算机与通信学院536例11.
11e使用DAO模型访问数据库,约束绑定控件。记录集的字段对象可以使用如下几种方法获取:Recordset.Fields(“字段名称”)、Recordset(“字段名称”)Recordset.Fields(“数字”)、Recordset(“数字”)在DAO中记录集对象为对象变量,故字
段可用rs(j)表示。例11.11c使用DAO模型访问数据库,用学号查找学生的记录。使用DAO模型访问数据库的例题。例11.11d使用DAO模型访问数据库,分页显示基本情况表的记录。本程序通过Bookmark属性设置当前记录的书签,用于当前页上记录的
定位。2022年11月12日星期六兰州理工大学计算机与通信学院537*11.5.4ADO对象使用ADO对象访问数据库比DAO对象模型更为简化,不论是存取本地的还是远程的数据,都提供了统一的接口。ADO的连接方法方法说明Dimdb
AsConnectionSetdb=NewConnectiondb.Open数据源连接字符串连接数据源。返回一个连接对象db。DimrsAsRecordsetSetrs=NewRecordsetrs.Open数据源,连接对象,指针,锁类型打开记录集。返回查询结果。2022年11
月12日星期六兰州理工大学计算机与通信学院53811.6报表制作数据报表设计器属于ActiveXDesigner组中的一个成员,在使用前需要执行“工程|添加DataReport”命令,将报表设计器加入到当前工程中,产生一个DataReport1对象,并在工具箱内产生一个“数据报表
”标签。标签文本图形线条形状函数“标签”控件在报表上放置静态文本“文本”控件在报表上连接并显示字段的数据“图形”控件可在报表上添加图片“线条”控件在报表上绘制直线“形状”控件在报表上绘制各种各样的图形外形“函数”控件在报表上建立公式。报表标头区
包含整个报表最开头的信息,一个报表只有一个报表头,可使用“标签”控件建立报表名报表注脚区包含整个报表尾部的信息,一个报表也只有一个注脚区页标头区设置报表每一页顶部的标题信息;页注脚区包含每一页底部的信
息;细节区包含报表的具体数据,细节区的高度将决定报表的行高。2022年11月12日星期六兰州理工大学计算机与通信学院539例11.12建立新工程,在窗体上放置两个命令按钮。▪在当前工程内加入一个DataEnvironent1对象。完成与指定数据库的连接
。在Connection1下创建Command1对象。▪在当前工程中加入报表设计器DataReport1,设置报表设计器的DataSource属性为数据环境对象,DataMember属性为Command1对象。▪将数据环境设计器
中Command1对象内的字段拖动到数据报表设计器的细节区。▪使用“标签”控件,在报表标头区插入报表名,页标头区设置报表每一页顶部的标题信息等。▪使用“线条”控件在报表内加入直线,使用“图形”控件和“形状”控件加
入图案或图形。▪在命令按钮Click事件内加入代码DataReport1.Show显示报表,DataReport1.PrintReport打印报表。2022年11月12日星期六兰州理工大学计算机与通信学院540
11.7错误处理错误处理步骤:1.用OnError语句设置错误陷阱,捕捉错误。2.编写错误处理程序,根据可预知的错误类型决定采取何种措施。捕捉错误示意:OnErrorErr对象Number错误号其他可根据Err.Number的值来编写出错处理程序。2022年11月12日
星期六兰州理工大学计算机与通信学院541OnError语句有如下几种形式:(1)OnErrorResumeNext───忽略错误行,继续执行下一语句。(2)OnErrorGoTo标号───使程序转跳到语句标号所指示的程序块。(3)OnErrorGoTo0───不使用错误处理程序块。处理方
法:Resume───重新执行引起错误的语句或指令。ResumeNext───忽略错误行,继续执行下一语句。Resume标号───忽略错误行,转跳到由<标号>指明的语句继续执行。若<标号>为0,则表示终止程序执行。2022年11月12日星期六兰州理工大学计算机与通信学院542例11.13错误处理的
基本方法SubOnErrorStatementDemo()DimResponse,Msg,Style,TitleAsStringDimdbAsDatabase,rsAsRecordsetOnErrorGoToErrorHandlerSetdb=OpenDatabase("A:\Student
.mdb")'打开数据库Setrs=db.OpenRecordset("基本情况")'设置记录集……ExitSub'正常退出本程序ErrorHandler:'错误处理块入口Style=vbRetryCancel+vbCritical+vbDef
aultButton2SelectCaseErr.NumberCase53'出错号53为文件不存在Msg="文件不存在!"Response=MsgBox(Msg,Style,"出错提示")IfResponse=vbCa
ncelThenExitSubCase71'71号驱动器未准备好Msg="A盘未准备好"Response=MsgBox(Msg,Style,"出错提示")IfResponse=vbCancelThenExitSubCaseEls
e'当发生其他不可预知的错误,退出本程序ExitSubEndSelectResume'再次执行原出错语句EndSub2022年11月12日星期六兰州理工大学计算机与通信学院543例11.14下列程序用于处理删除一个已打开的文件所产生的错误。SubResumeS
tatementDemo()OnErrorGoToErrorHandler'设置错误陷阱Open"testfile"ForOutputAs#1Kill"testfile"'企图删除一个打开的文件ExitSubErrorHandler:Selec
tCaseErr.NumberCase55'文件已打开错误Close#1'处理方法:关闭文件CaseElse……EndSelectResumeEndSub2022年11月12日星期六兰州理工大学计算机与通信学院544例11.16处理被零除、溢出和
非法的过程调用三种情况产生的错误。FunctionDivide(numer,denom)asVariantConstmnErrDivByZero=11'用于代表被零除ConstmnErrOverFlow=6'溢出ConstmnErrBadCall=5'非法的过程调用OnE
rrorGoToMathHandlerDimMsgasStringDivide=numer/denom'计算ExitFunctionMathHandler:IfErr.Number=MnErrDivByZeroOrErr.Numbe
r=ErrOverFlow_OrErr=ErrBadCallThenDivide=Null'产生错误则返回NULLElse'显示意想不到的错误信息。Msg="Unanticipatederror"&Err.NumberMsg=Msg&":"&Err.DescriptionMs
gBoxMsg,vbExclamationEndIfResumeNext'不管什么情况,ResumeNextEndFunction2022年11月12日星期六兰州理工大学计算机与通信学院