《VB语言基础教程》由会员分享,可在线阅读,更多相关《VB语言基础教程(265页珍藏版)》请在金锄头文库上搜索。
1、Visual Basic程序设计 (6.0版)清华大学计算机教研室清华大学计算机教研室毕迎春毕迎春第一章第一章 Visual Basic程序设计概述程序设计概述1.1 概述1.2 运行环境、安装和启动1.3 VB集成开发环境21.11.1概述概述一、一、VBVB简介:简介:Visual Basic是基于Basic的可视化的程序设计语言。 Visual Basic 6.0中文版是Microsoft公司最新推出的可视化开发工具,是一种基于Windows操作系统的新型的现代程序设计语言,是一种易于学习、功能强、效率高的编程工具。任何具有初步程序设计基础的人,都能在很短的时间内掌握好VB,并有效地编写
2、出各种Windows程序。VB6.0VB6.0包括三个版本:学习版、专业版、企业版包括三个版本:学习版、专业版、企业版3二、二、VB主要功能特点:主要功能特点:1. 具有面向对象面向对象的可视化可视化设计工具2. 事件驱动事件驱动的编程机制3. 提供了易学易用易学易用的应用程序集成开发环境4. 结构化结构化的程序设计语言5.支持多种数据库多种数据库系统的访问6.OLE技术。VB核心核心就是其对对象的链接与嵌入(OLE)的支持。 7.Active技术8.完备的help联机帮助功能三、VB6.0新功能特点41.21.2运行环境、安装和启动运行环境、安装和启动一、运行环境:二、安装:安装文件:set
3、up.exe三、启动:方法:方法:1、双击桌面VB快捷方式。2、“开始”程序Microsoft Visual Studio 6.0| Microsoft Visual Basic 6.0 3、 “开始”运行C:program files Microsoft Visual Studio VB98VB6.exe5进入进入VB6.0窗口窗口61.3 VB集成开发环境集成开发环境71.主窗口主窗口 应用程序窗口应用程序窗口,由标题栏、菜单栏和工具栏组成由标题栏、菜单栏和工具栏组成VB的三种工作模式的三种工作模式(标题栏总显示当前模式)(标题栏总显示当前模式) (1)设计模式:)设计模式:创建应用程序的
4、大多数工作都是在设计创建应用程序的大多数工作都是在设计时完成的。在设计时,可以设计窗体、绘制控件、编写代码时完成的。在设计时,可以设计窗体、绘制控件、编写代码并使用并使用“属性属性”窗口来设置或查看属性设置值。窗口来设置或查看属性设置值。 (2)运行模式:)运行模式:代码正在运行的时期,用户可与应用程代码正在运行的时期,用户可与应用程序交流。可查看代码,但不能改动它。序交流。可查看代码,但不能改动它。 (3)中中断断模模式式:程程序序在在运运行行的的中中途途被被停停止止执执行行时时。在在中中断断模模式式下下,用用户户可可查查看看各各变变量量及及不不是是属属性性的的当当前前值值,从从而而了了解解
5、程程序序执执行行是是否否正正常常。还还可可以以修修改改程程序序代代码码,检检查查、调调试试、重置、单步执行或继续执行程序。重置、单步执行或继续执行程序。82.窗体窗体(Form)设计窗口设计窗口 窗体设计窗口是屏幕中央的主窗口,它可以作窗体设计窗口是屏幕中央的主窗口,它可以作为自定义窗口用来设计应用程序的界面。用户可以为自定义窗口用来设计应用程序的界面。用户可以在窗体中添加控件、图形和图片来创建所希望的外在窗体中添加控件、图形和图片来创建所希望的外观。每个窗口必须有一个的窗体名字,建立窗体时观。每个窗口必须有一个的窗体名字,建立窗体时缺省名为缺省名为Form1,Form2, . . .。窗体网
6、格点间距的设置:设计模式窗体网格点间距的设置:设计模式-”工具工具” ”选项选项”应注意窗体名(代码中使用的标识对象名称)和窗应注意窗体名(代码中使用的标识对象名称)和窗体文件名的区别体文件名的区别 9窗体设计窗口窗体名窗体文件名103.代码代码(code)窗口窗口 在设计模式中,通过双击窗体或窗体上任何对象或通过在设计模式中,通过双击窗体或窗体上任何对象或通过“工程资源管理器工程资源管理器”窗口中的窗口中的“查看代码查看代码”按钮来打开代码编辑按钮来打开代码编辑器窗口。代码编辑器是输入应用程序代码的编辑器。器窗口。代码编辑器是输入应用程序代码的编辑器。 代码窗口主要包括:代码窗口主要包括:
7、a.对象列表框对象列表框 b.过程列表框过程列表框 c.代码框代码框 d.过程查看按钮过程查看按钮 e.全模块查看按钮全模块查看按钮11124. 属性属性(properties)窗口窗口 属性是指对象的特征,如大小、标题或颜色等属性是指对象的特征,如大小、标题或颜色等数据。在数据。在Visual Basic6.0设计模式中,属性窗口列出设计模式中,属性窗口列出了当前选定窗体或控件的属性的值,用户可以对这了当前选定窗体或控件的属性的值,用户可以对这些属性值进行设置。些属性值进行设置。 13 工程是指用于创建一个应用程序的文件的集合。工工程是指用于创建一个应用程序的文件的集合。工程资源管理器列出了
8、当前工程中的窗体和模块程资源管理器列出了当前工程中的窗体和模块 5. 工程资源管理器工程资源管理器(project explorer)(project explorer)窗口窗口14l工程文件的扩展名为.VBPl工程资源管理器下面的列表窗口,以层次列表形式组成这个工程的所有文件。l主要包括三种类型的文件:窗体文件(窗体文件(.FRM)存储窗体上使用的所有控件对象和有关的属性、对象相应的事件过程、程序代码。标准模块文件(标准模块文件(.BAS)所有模块级变量和用户自定义的通用过程(可以被应用程序各处调用的过程)类模块文件(类模块文件(.CLS)包含用户对象的属性及方法。 15 工具箱提供一组工具
9、,工具箱提供一组工具,用于设计时在窗体中放置用于设计时在窗体中放置控件生成应用程序的用户控件生成应用程序的用户接口。系统启动后缺省的接口。系统启动后缺省的General工具箱就会出现工具箱就会出现在屏幕左边,上面有常用在屏幕左边,上面有常用“部件部件” 6. 工具箱工具箱( (ToolBoxToolBox) )窗口窗口16l定制工具箱定制工具箱 添加选项卡: 对添加的选项卡加控件的方法: (1)在已有的选项卡中拖动所需控件 (2) 激活选项卡-”工程”-“部件” 17 窗体布局窗口显示在屏幕右下角。用户可使窗体布局窗口显示在屏幕右下角。用户可使用表示屏幕的小图像来布置应用程序中各窗体的位用表示
10、屏幕的小图像来布置应用程序中各窗体的位置。这个窗口在多窗体应用程序中很有用,因为这置。这个窗口在多窗体应用程序中很有用,因为这可以指定每个窗体相对于主窗体的位置。可以指定每个窗体相对于主窗体的位置。 7 7窗体布局窗口窗体布局窗口18l立即窗口:立即窗口:中断模式中调试应用程序。l对象浏览窗口:对象浏览窗口:可查看工程定义的模块或过程,也可查看对象库、类型库、类、方法、属性及可在过程中使用的常数。19第二章第二章 简单的简单的VB程序设计程序设计2.1 程序设计方法的发展2.2 对象的概念2.3 建立简单的应用程序2.4窗体和基本控件2.5工程的管理及环境设置 2.6制作成安装盘 2.7使用帮
11、助系统 202.1 2.1 程序设计方法的发展程序设计方法的发展1.1.初期的程序设计初期的程序设计 高运行效率、少占用内存为目标2.2.结构化程序设计结构化程序设计程序的可读性、可维护性为目标 程序=算法+数据结构 的面向过程的程序设计3.3.面向对象的程序设计(面向对象的程序设计(OOP) 降低程序的复杂性、提高软件的开法效率和改善工作界面为目标 程序=对象+消息 的面向对象的程序设计21l结构化的分解突出过程(How to do?)l面向对象的分解突出真实世界和抽象的对象(What to do?)l目前常用的面向对象语言有:Visual Basic、Visual C+、Visual Fo
12、xPro等l优点 a.符合人们的思维方法 b.易于软件的维护和功能的增减 c.能用继承的方式减短程序开发时间 d.与可视化技术结合,改善了工作界面222.2 2.2 对象的概念对象的概念一、对象和类一、对象和类1 1、类、类:是创建对象实例的模板,是同种对象的集合与抽象, 包含了创建对象的属性描述和行为特征的定义.2 2、对象、对象: : 是类的一个实例,继承了类的属性、方法。 Vb中常用的对象有:窗体、控件等。3 3、控件:、控件:以图标的形式放在工具箱中。VB中的控件分为三类: 内部控件(标准控件):如工具箱上的控件,20个ActiveX控件:“工程/部件”命令加载可插入对象:Window
13、s应用程序的对象,如Excel工作表。二、对象的建立和编辑:二、对象的建立和编辑: 1、对象的建立:两种方法 2、对象的选定:单选、多选3、复制或删除对象 4、对象的命名23三、对象的三要素:属性、事件和方法三、对象的三要素:属性、事件和方法(1 1)属性)属性 对象的性质,即用来描述和反映对象特征的参数。(2 2)事件)事件 对象的响应称为事件,它发生在用户与应用程序交互时。如单击控件、鼠标移动、键盘按下等。l 事件过程 指附在该对象上的用户编写的程序代码,是事件的处理程序。l 事件驱动过程 是图形用户界面的本质,由用户控制而代码作出响应。24VB程序执行步骤:程序执行步骤:l启动应用程序,
14、装载和显示窗体l窗体(或窗体上的控件)等待事件的发生l事件发生时,执行对应的事件过程l重复执行(2)和(3),直到遇到“END”结束语句结束程序的运行或单击“结束”按钮强制停止程序的运行 25(3 3)方法)方法 对象的动作,即将一些通用的过程编写好并封装起来,作为方法供用户直接调用。l对象方法的调用格式: 对象.方法参数名表例如:在窗体上显示一行文字。 Form1.Print ”欢迎使用Visual Basic6.0”262.3 2.3 建立简单的应用程序建立简单的应用程序设计一个设计一个VBVB应用程序的通用步骤:应用程序的通用步骤:1.设计用户界面的对象2.设置对象的属性3.编写对象事件
15、代码4.保存文件5.程序运行和调试(解释执行: 或 “运行|启动” 或 按F5)6.建立可执行文件。 (编译运行:“文件”|“生成exe”)27例例2.1 编写一个对输入字符进行转换的程序编写一个对输入字符进行转换的程序l转换规则为:将其中的大写字母转换成小写字母,小写字母转换成大写字母,空格不转换,其余转换成“*”。l要求每输入一个字符,马上就进行判断和转换。28lPrivate Sub Text1_KeyPress(KeyAscii As Integer)lDim aa As String * 1laa = Chr$(KeyAscii)lSelect Case aal Case a To
16、zl aa = Chr$(KeyAscii - 32)l Case A To Zl aa = Chr$(KeyAscii + 32)l Case l Case Elsel aa = *lEnd SelectlText2.Text = Text2.Text & aalEnd Sub29lPrivate Sub Command1_Click()l Text1.Text = l Text2.Text = l lEnd SublPrivate Sub Command2_Click()l Endl lEnd Sub302.3.4 保存和运行程序保存和运行程序l保存窗体文件l保存工程l程序的运行 (1)编
17、译运行模式生成.exe (2)解释运行模式F5312.4 2.4 窗体和基本控件窗体和基本控件一、基本属性一、基本属性 1.Name1.Name名称属性名称属性 创建的对象名称,有默认的名.在程序中,控件名是作为对象的标识而引用,不会显示在窗体上。 2.Caption2.Caption标题属性标题属性该属性决定了控件上显示的内容。 3.Height3.Height、widthwidth、toptop和和leftleft属性属性324.Enabled4.Enabled属性属性 控件是否可操作. 当设置为false时,呈暗淡色,禁止用户进行操作.5.Visible5.Visible属性属性 控件是
18、否可见.当设置为false时, 用户看不到,但控件本身存在。6.Font6.Font属性属性 Fontname 字体 Fontsize字体大小 Fontbold是否是粗体 Fontitalic 是否斜体 Fontstrikethru是否加一删除线 Fontunderline是否带下划线 例2.2 在窗体上建立两个命令按钮 Command1和Command2, Command2 的Font通过属性窗口设置, 其余属性 通过代码实现。337. 7. ForecolorForecolor前景颜色属性前景颜色属性 设置控件的前景颜色(即正文颜色). 其值是一个16进制常数,用户可以在调色板中直接选择所
19、需颜色。8. 8. BackcolorBackcolor背景颜色属性背景颜色属性9. 9. BackstyleBackstyle背景风格属性背景风格属性 0-transparent:透明显示,即控件背景颜色显示不出来10. 10. BorderStyleBorderStyle边框风格属性边框风格属性 0-None:控件周围没有边框 1-Fixed Single:控件带有单边框。11. Alignment11. Alignment属性属性 控件上正文水平对齐方式 0: 正文左对齐 1: 右对齐2: 居中12. 12. AutoSizeAutoSize属性属性 控件是否根据正文自动调整大小, Fa
20、lse.3413. 13. MousePointerMousePointer属性属性 指示鼠标指针的类型,当为99时为用户自定义类型。 MouseIconMouseIcon属性属性 设置鼠标的图标,当MousePointer为99时起作用。图标库在 Graphics目录下,扩展名一般为.ico或.cur14.WordWarp14.WordWarp属性属性为为TrueTrue时水平方向上下发生变化。时水平方向上下发生变化。15.TabIndex15.TabIndex属性属性 决定了按Tab键时,焦点在各个控件移动的顺序。各个控件默认的TabIndex值就是控件建立时的顺序,第一个为0.16.16
21、.控件默认属性控件默认属性 反映该控件最重要的属性,使用时可省略属性名。 如:Text1.text=“Welcome”与Text1=“Welcome”是等价的。 部份控件默认值部份控件默认值: 文本框的为:Text 命令按钮为:Default 标签为:Caption 单选/复选按钮为:Value 图形/图像框为:Picture 注意注意:Command的Default为True,当按Enter键,该控件起作用。 35 例:有关属性的综合应用。 对象设置: 效果:36二、窗体二、窗体1.1.属性属性:P27:P27StartUpPosition、 Icon、ControlBoxMaxButton
22、、MinButtonWhatsThisButton、WhatsThisHelpPicture、AutoRedrawBorderStyle (0 1 2 3 4 5 )WindowsState (0-正常、1-最小化、2-最大化)注注: 1、Picture属性属性可在属性窗口设置,也可通过Loadpicture函数用代码来实现。函数格式为: 对象.Picture=Loadpicture(“文件路径文件名”) 对象可以是窗体、图片框、图像框,缺省时为窗体。 VB可以识别的图形格式有:.bmp .gif .jpg .wmf .ico .cur等。 2、两者的不同在于:属性设置时设置的图片 ,会被保存
23、起来并与窗体同时加载,而运行时加载的图片,不和应用程序一起保存。372.2.事件:事件:P28P28 Click、DblClick、Load、UnLoad 等 Load 当装入窗体时激发,通常用于对属性和变量初始化3.3.方法:方法:P28P28 Print、Cls、Move、Show、Hide等 当在Form_Load事件中使用Print方法时,必须将该窗体的 AutoRedraw设置为True,否则Print方法无效。 例上述属性、Click、DblClick和Load 事件演示。 书上例子:P2838三三. . 标签标签 LabelLabel1、功能: 用于显示文本(输出)信息,不能作为
24、输入信息的界面。2、属性:P29 3、事件:click、Dblclick、Change 例2.5. 显示浮雕效果的文字,实现方法:字颜色、标签位置书上例子:P29四四. .文本框文本框 TextBoxTextBox 功能: 是一个文本编辑区域,可以输入,编辑和显示正文内容。 1 1、属性:、属性:P30P30 Text : 正文内容 Maxlength: 设置正文的最多字符个数,0任意长度值. MultiLine: 是否为多行,默认一行. FALSE ScrollBars: 当MultiLine为True时,该属性才有效,表示滚动条的形式 0-None、1-Horizontal、2-Verti
25、cal、3-Both。 Locked: 是否可被编辑属性,False,表示为可编辑。PassWordchar : 口令字符. Text属性返回输入的数据,屏幕显示该字符, SelStart,SelLength,SelText : 选中文本的起始、长度、内容。 例2.6 复制选中的文本392.2.常用事件常用事件 Change : 当改变文本框的Text属性时会引发该事件. KeyPress(KeyAscii As Integer): 同上,并可返回一个KeyAscii参数 KeyAscii 为13,按回车键;为0 去除刚输入的字符. LostFocus : 当控件失去焦点时发生. GotFoc
26、us : 当控件获得焦点时发生.3.3.常用方法常用方法 对象.SetFocus: 是把光标移到指定的文本框对象中(即设置焦点)。4.4.文本框的应用文本框的应用 数据过滤数据过滤例例2.7 要求输入合法的数字数据。当输入结束时(按Tab键),对于输入正确的数据,显示正确信息;对输入的非数字数据,则响铃(Beep)、显示错误信息、清除文本框中的内容,并使焦点重新回到文本框。 Text2_ LostFocus 当输入结束按Tab键时,该事件激发 IsNumeric(Text2) : 判断是否输入非数字数据. Text2.SetFocus : 使焦点重新回到文本框 书上例子:P3240五五.命令按
27、钮命令按钮CommandButton功能:接受用户输入的命令。输入命令可以有三种方式: 鼠标单击 Tab键焦点到该按钮 快捷键 1. 属性:属性:P33lCaption: 命令按钮显示的内容,可设置快捷键,例 &Ok ,显示 OklValue: 检查该按钮是否按下. 该属性在设计时无效.lPicture : 按钮可显示图片文件(.bmp和.Ico),当Style为1时有效lStyle : 确定显示的形式. 0 只能显示文字, 1 文字、图形均可 。lToolTipText :设置工具提示,和Picture结合使用。 2.事件事件 Click413.应用应用:例例 2.8 建立一个允许剪切、复制
28、和粘贴的简单便笺板程序。 可增加内容:利用MouseMove事件决定命令按钮的有效性,即当选中内容,“剪切”、“复制”按钮有效,否则无效。42lDim st As StringlPrivate Sub cmdcopy_Click()lst = txtnoteedit.SelTextlcmdcopy.Enabled = Falselcmdcut.Enabled = Falselcmdpaste.Enabled = TruelEnd SublPrivate Sub mdcut_Click()lst = txtnoteedit.SelTextltxtnoteedit.SelText = lcmdco
29、py.Enabled = Falselcmdcut.Enabled = Falselcmdpaste.Enabled = TruelEnd SubPrivate Sub cmdexit_Click()EndEnd SubPrivate Sub cmdpaste_Click()txtnoteedit.SelText = stEnd SubPrivate Sub Form_Load()cmdcopy.Enabled = Falsecmdcut.Enabled = Falsecmdpaste.Enabled = FalseEnd Sub43lSub txtnoteedit_MouseMove(But
30、ton As Integer, Shift As Integer, X As Single, Y As Single)lIf txtnoteedit.SelText Thenl cmdcopy.Enabled = Truel cmdcut.Enabled = Truel cmdpaste.Enabled = FalselElsel cmdcopy.Enabled = Falsel cmdcut.Enabled = Falsel cmdpaste.Enabled = Truel End IflEnd Sub44六、常用方法六、常用方法lVb中使用方法的语法结构是相同的l对象.方法参数列表l1.p
31、rint方法方法l形式:对象.printspc(n)|tab(n)表达式列表l作用:在对象上输出信息。l对象:可以是窗体(form)、图形框(picturebox)、打印机。若省略,则在窗体上输出。45l表达式列表开始位置是由对象的currentx和currenty属性决定的,缺省为打印对象的左上角0,0。l例2-9:print方法输出图形。lPrivate Sub Form_Click()lForm1.CurrentX = 200lForm1.CurrentY = 550lFor i = 1 To 5l Print Tab(i + 5); String(6 - i, ); _l Spc(6)
32、; String(i, )l Next i lEnd Sub462、cls方法l形式:对象.cls (如:picture.cls)l作用:用于清除运行时在窗体或图形框中显示的文本或图形。l注意:l(1)cls方法只清除运行时在窗体或图形框中显示的文本或图形,不清除窗体在设计时的文本或图形。l(2)cls方法使用后, currentx和currenty属性被设置为0。473、move方法l形式:l对象.move 左边距离,上边距离,宽度,高度l作用:用于移动窗体或控件,并可改变其大小。l对象:可以是窗体及除时钟、菜单外的所有控件,省略对象为窗体。如果对象是窗体,则“左边距离”和“上边距离”以屏幕
33、左边界和上边界为准,否则以窗体的左边界和上边界为准,宽度和高度表示可改变其大小。48例2-10lPrivate Sub Form_Load()lImage1.Top = 0lImage1.Left = 0lImage1.Picture = LoadPicture(App.Path + 1.gif)lEnd SublPrivate Sub Image1_Click()lImage1.Move (Form1.Left + Form1.Width) 2 - Form1.Left,(Form1.Top + Form1.Height) 2 - Form1.Top,Image1.Width 2, Imag
34、e1.Height 2lEnd Sub49七、应用举例l例2-11:根据房产商提供的信息,购房者选择房型、面积、单价、按揭期等信息,编写计算每月支付贷款的程序。l程序由两个窗体构成,第一个窗体输入或选择买房的数据,该窗体由列表框选择数据、标签显示数据、文本框输入数据;第二个窗体显示房屋的平面图,该窗体仅有一个图形控件。502.5 2.5 工程的管理工程的管理一、工程的组成一、工程的组成 工程文件包含了一个应用程序的所有文件:l工程文件(.vbp):l工程组文件(.vbg):l窗体文件(.frm):控件及属性、事件过程和自定义过程l窗体的二进制数据文件(.frx),自动产生同名.frx文件。l标
35、准模块文件(.bas)l类模块文件(.cls)l资源文件(.res)lActiveX控件的文件(.ocx)二、创建、打开和保存工程:二、创建、打开和保存工程:“文件文件”菜单菜单51三三. .添加、删除和保存文件:添加、删除和保存文件:可利用“文件”和“工程”菜单 1、窗体名和窗体文件名概念 窗体名窗体名:窗体的Name属性,在代码中用来引用该窗体,同一工程不能有相同的窗体名; 窗体文件名窗体文件名:窗体存放在磁盘上的文件名,该文件包含了该窗体的所有控件属性和代码,同一文件夹不能有相同的文件名。 2、在工程中添加添加现存的窗体时,只是对该窗体文件的引用纳入工程。因此,如果更改窗体并保存它,会影
36、响包含此窗体文件的任何工程。 3、在工程中删除除窗体时,仅将此窗体从工程里删除掉,但是窗体文件仍存在于磁盘上。但是,如果在VB之外删除一个窗体文件,VB不能更新此工程文件,当打开此工程时,将显示一个文件丢失的错误信息。 窗体文件名窗体名52四、环境设置l“工具”选项”l1.”编辑器”选项卡l2、“通用”选项卡4、对窗体文件改名改名方法:在“工程资源管理器”中-右击窗体文件-“Form另存为” 5、保存保存窗体文件:若只想保存窗体文件而不保存工程文件,可直接在“工程资源管理器”中选定,然后执行“文件”菜单中的相应选项。532.6 制作成安装盘l2.6.1 使用打包和展开向导l打包:把工程中用到的
37、各种类型的文件(包括工程自身的文件、必要的系统文件和安装主文件)进行打包压缩后,存放到特定的目录下。l展开:把打包的文件展开到用户可以携带的用来安装的软盘、光盘等介质。l管理脚本:记录打包或展开过程中的设置,便于以后做同样的操作。l系统的压缩文件以.cab扩展名保存。l2.6.2 检测安装程序54 第三章第三章 VB语言基础语言基础3.1 编码基础3.2 数据类型3.3 常量与变量 3.4 运算符和表达式 3.5 基本语句 3.6 数组 3.7 过程3.8 常用算法举例3.9 程序调试553.1 编码基础编码基础一、书写要求:一、书写要求:1.VB代码不区分字母的大小写代码不区分字母的大小写
38、系统关键字自动转换每个单词的首字母大写; 用户自定义行以第一次为准2.语句书写自由语句书写自由 一行可书写几个语句,之间用冒号分隔;一行最多255个字符; 一条语句可分若干行书写,用续行符 (空格+下划线)连接3.注释有利于程序的维护和调试注释有利于程序的维护和调试 Rem 或 单撇号“” 以及“编辑”工具栏的“设置注释块”; VB中注释语句会自动变为绿色4.保留行号与标号保留行号与标号5.其他注意事项:其他注意事项:保留字与变量之间至少有一空格; 字母“l”与数字“1”、字母“o”与数字“0”的使用。563.2 数据类型数据类型 一、一、 标准数据类型:标准数据类型:571、数值数据类型:
39、Integer Long Single Double Currency Byte(1)Integer和Long型用于保存整数(2)Single和Double型用于保存浮点实数(3)Currency型是定点实数或整数(4)Byte字节型用于存储二进制数582、日期(Date)数据类型 按8字节浮点数来存储。 日期范围:公元100年1月1日9999年12月31日 时间范围:0:00:00 23:59:59 表示方法:一般日期形式前后加来表示 另一种是以数字序列表示日期和时间(1)一般日期表示法:使用成对#将任何可被认作日期和时间的字符括起来。公元年份默认19年,因而填入1995年与填入95年效果一
40、样,但年的部分输入029间的数字,则VB自动转换为20 年。例如:#5/25/24#与#5/25/2024#等价。 而#5/25/95#,#May 25,95#,#May-25-95#, #25 May 1995#, #1995 May 25#等均为合法日期格式。59(2)数字序列表示法数字序列是双精度的浮点数,由VB自动解释。序号的整数部分表示日期,小数部分表示时间。在VB中,基准日期为公元1899年12月30日,这一天的整这一天的整数部分为数部分为0,比基准早的日期序号为负数,比其晚的日期序号,比基准早的日期序号为负数,比其晚的日期序号为正数为正数,其取值范围为657434(公元100年1
41、月1日)到2958465(公元9999年12月31日)。小数部分:以某个时间点小数部分:以某个时间点占一天占一天24小时的比例表示。小时的比例表示。如:6:00 AM会以0.25来表示。-2.5 表示1899-12-28 12:00:005.75表示1900-1-4 18:00:00366.05表示1900-12-31 1:12:00367.05表示1901-1-1 1:12:00-367.05表示1898-12-28 1:12:00603、逻辑(布尔型)数据型:Boolean 当逻辑型转换成整型数据时:true (-1) false(0) 当其他类型数据转换成逻辑数据时: 非0数转换为tru
42、e, 0转换为false4、字符串型:String “” 5、对象数据类型:Object 作为32位(4个字节)地址来存储61l6、变体类型:Variantl 是所有未定义的变量的缺省数据类型,它可以包括标准数据类型,还包含四个特殊的数据:l empty(空)表示未指定确定的数据l null(无效)表示数据不合法l Error(出错)指出过程中出现了一个错误条件l Nothing(无指向)表示数据还没有指向一个具体对象lVartype:检测变体型变量中保存的数值类型l 如: dim t l Vartype(t) l 或Vartype(667)62二、自定义类型二、自定义类型让用户自己定义的数据
43、类型,由若干个标准数据类型组成。是一组不同类型变量的集合。相当于C语言中的结构类型;Pascal中的记录类型。1.1.自定义类型的定义自定义类型的定义 形式如下: Type 自定义类型名元素名(下标) As 类型名 元素名(下标) As 类型名 End Type其中:其中:元素名:表示自定义类型中的一个成员 下标:表示数组 类型名:为标准类型63例如,以下定义了一个有关学生信息的自定义类型: Type StudType No As Integer 学号 Name As String * 20 姓名 Sex As String * 1 性别 Mark(1 To 4) As Single 4门课程
44、成绩 Total As Single 总分 End Type注意:注意: (1)自定义类型一般在标准模块(.BAS)中定义,默认是Public;在窗体必须是Private。 (2)自定义类型中的元素类型可以是字符串,但应是定长字符串。 (3)不要将自定义类型名和该类型的变量名混淆,前者表示了如同Integer、Single等的类型名,后者VB根据变量的类型分配所需的内存空间,存贮数据。 (4)自定义类型一般和数组结合使用,简化程序的编写。642 2自定义类型变量的声明和使用自定义类型变量的声明和使用(1) 声明形式: Dim 变量名 As 自定义类型名 例 Dim Student As Stu
45、dType (2) 引用: 形式:变量名.元素名 例 表示Student变量中的姓名,第4门课程的成绩,则表示如下:Student.Name,Student.Mark(4)(3) 赋值: 如:Student.Name=“王刚” Student.Mark(4)=98653.3 常量与变量常量与变量一一. .常量和变量的命名规则常量和变量的命名规则 常量:在程序运行中其值不可以改变。 变量:在程序运行中其存储的值可以改变。 命名规则:命名规则:1.以字母或汉字开头,后可跟汉字、字母、数字或下划线组 合,长度小于等于255个字符;2.不能使用VB中的关键字;3.VB中不区分变量名的大小写.4.为了增
46、加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。如:strMystring、intCount66vVB6.0的关键字有:的关键字有: As Binary ByRef ByVal Date Else Empty Error False For Friend Get Input Is Len Let Lock Me Mid New Next Nothing Null On Option Optional ParamArray Print Private Property Public Resume Seek Set Static Step String Then Time To
47、 True WithEvents67二二. . 常量常量 ( (一一) )直接常量直接常量 有数值常量(整数、长整数、定点数和浮点数)、字符串常量、布尔常量、日期常量( (二二) )符号常量符号常量1. 1. 系统提供的常量系统提供的常量 系统定义常量位于对象库中,可通过“对象浏览器”查看. 例: vbNormal 、 vbMinimized、vbMaximized、vbblue等 form1.windowsstate=vbmaximized 将窗口极大化 form1.windowsstate=2 与上面的语句等价的682. 2. 用户声明常量用户声明常量 形式: Const 常量名 AS 类
48、型 = 表达式 省略 AS 类型 ,常量的类型由表达式值的类型决定,也可在常量后加类型符。 表达式:可以是数值常数、字符串常数以及由运算符组成的表达式。对于数值常数除了可用十进制表示外,还可以使用十六进制数(数值前加&H)和八进制数(数值前加&O)。 为使与变量名区分,一般常量名使用大写字母 例 Const MAX=100 Const PI=3.14159 Const PI#=3.14159 Const MAX as integer=&O14469三三. .变量变量1.1.用用DimDim语句显式声明变量语句显式声明变量 形式: Dim 变量名 AS 类型 Dim 变量名类型符 例 Dim i
49、Count As integer , sAllsum As single 等价于 Dim iCount%, sAllsum! 对于字符串变量,根据其长度是否固定,有两种方法: Dim 字符串变量名 As String Dim 字符串变量名 As String*字符数2.2.隐式声明隐式声明 未进行上述的声明而直接使用,其类型为 Variant 类型。 建议不使用。注意注意: 在通用声明处加 Option Explicit 语句可强制显式声明变量。703.4 运算符和表达式运算符和表达式一一. . 运算符运算符 1. 算术运算符算术运算符 例:5+10 mod 10 9 / 3 +2 2 结果:
50、10 取ia=3712. 字符串运算符字符串运算符: : 、+ “”和 “ +”,都是将两个字符串拼接起来。 123 + 456 结果 123456 123 & 456 结果 123456 区别区别: 若+ 的两旁的操作数均为数值型则进行算术加;若一个为数字字符型,另一个为数值型,则自动将数字字符转换为数值,然后进行算术加;若一个为非数字字符型,另一个为数值型,则出错。 &则不管什么类型,强制转换为字符型进行拼接。 例如: abcdef & 12345 结果为 abcdef12345 abcdef + 12345 出错 123 & 456 结果为 123456 123 + 456 结果为 57
51、9 12000+“123” & 100 结果为“12123100” Val(left$(“12345678”,4)+mid$(“12345678”,4,2) 结果为123445注意:注意:(1)123 + True 结果为 122 True转换为数值-1,False转换为数值0 (2)使用“”时,最好在两侧的操作数间加入一个空格。因为Long类型变量 的类型符以及八进制、十六进制数值表示法的起始字符也为“”。723关系运算符关系运算符 将两个操作数进行大小比较,结果为逻辑量。 (1) 关系运算符的优先级相同;(2)“Like”运算符与通配符:“?”、“*”、“#”、“字符列表”、“!字符列表”
52、结合使用,常用于模糊查询。其中“?”表示任何单一字符,“*”表示零个或多个字符,“#”表示任何一个数字(09),字符列表表示字符列表中的任何单一字符,!字符列表表示不在字符列表中的任何单一字符。例如,找姓名变量中姓张的学生,则表达式为:姓名 Like “张*” ,又如找没有张字的学生,表达式为:姓名 Like “!张”734. 逻辑运算符逻辑运算符说明:1、Not:进行取反运算;2、And:操作数均为真时,结果才为真;3、Or:操作数中有一个为真时,结果为真;4、Xor:操作数相反时,结果才为真;5、Eqv:操作数相同时,结果才为真;6、Imp:第1个操作数为真,第2个为假时,结果才为假,其余
53、结果均为真。7、优先级:NotAndORXorEqvImp74l如果逻辑运算符对数值进行运算,则以数字的二进制值逐位进行逻辑运算。l(1)And运算符常用于屏蔽某些位。l(2)Or运算符常用于把某些位置1。l(3)连续两次进行Xor运算,可恢复原值。l例:10 and 7l 10 or 775二二. . 表达式表达式 1.表达式表达式组成组成 变量、常量、函数、运算符和圆括号 2.书写规则书写规则 (1) 运算符不能相邻。例a+ -b是错误的。 (2) 乘号不能省略。例x 乘以y 应写成:x*y (3) 括号必须成对出现,均使用圆括号。 (4) 表达式从左到右在同一基准上书写,无高低、大小。
54、3. 不同数据类型的转换不同数据类型的转换 运算结果的数据类型向精度高的数据类型靠. IntegerLongSingleDouble字符运算符关系运算符逻辑运算76表达式书写举例sin(45*3.14/180)+(exp(10)+log(10)/sqr(x+y+1)a*b*c*d/e/f/g 或 a*b *c*d/(e*f*g) 77例:用人单位招聘秘书:年龄小于40岁的女性,学历专科或本科 年龄40 性别=“女” (学历=“专科” 学历=“本科”) And And Or比a小,比b大 用 Ora小数b大数a小数b大数 比a大,比b小 用 And例:表示算术表达式: 正确的VB表达式: 3=x
55、 And x =7 错误的VB表达式: 3=x=7 或 3=x Or x=7 考虑:若分别写成: 年龄40 And 性别=“女” And (学历=“专科” And 学历=“本科”) 年龄40 Or 性别=“女” Or (学历=“专科” Or 学历=“本科”)781. 数学函数数学函数: Rnd函数返回0和1(包括0但不包括1)之间的双精度随机数. 例:产生1100的随机整数: Int(Rnd *100)+1 产生1003000的随机整数:Int(Rnd*2901)+100 随机产生“A” “Z”的字符:Chr(Int(Rnd*26+65) 注意:注意: (1)产生一定范围内的随机整数通常表示为
56、: Int(Rnd*范围范围)+基数基数 或或 Int(Rnd*范围范围+基数基数) (2)每次运行时,要产生不同序列的随机数,执行Randomize 语句。 Randomize number 注:注:函数名后有函数名后有$符号,表示函数返回值为字符串。符号,表示函数返回值为字符串。三、常用内部函数三、常用内部函数792. 转换函数转换函数 Chr(66) B Asc (B) 66 Asc(Chr(99) 99 Chr(Asc(K) K Ucase$(abcdefg) ABCDEFG“3.日期函数日期函数: Date返回系统日期 Time返回系统时间 Now返回系统日期和时间 Year返回年份
57、 (1)DateAdd增减日期函数 (2)DateDiff间隔日期函数三、常用内部函数三、常用内部函数804. 字符串编码及操作函数字符串编码及操作函数 (1)字符串编码字符串编码 Windows系统对字符采用了DBCS编码,中文2字节,西文1字节 VB中字符Unicode编码,任何字符任何字符2字节字节. Len(“中国good”)为6 LenB(“中国good”)为12 StrConv() 进行DBCS与Unicode之间转换 . (2)字符串函数字符串函数 Mid$(ABCDEFG,2,3) BCD InStr(2, “EFABCDEFG, EF) 7 注:注:函数的自变量中有函数的自变
58、量中有M,表示,表示M=0区分大小写,区分大小写,M=1不区不区分,省略分,省略M区分大小写。区分大小写。815.格式输出函数格式输出函数Format()功能:Format()可以使数值、 日期或字符串按指定的格式输出。格式:Format(表达式,格式字符串) 其中,表达式:为要格式化的数值、日期和字符串类型表达式。 格式字符串:表示按其指定的格式输出表达式的值。格式字符串有三类:格式字符串有三类: (1)数值格式化: 将数值表达式的值按“格式字符串”指定的格式输出。(2)日期和时间格式化(3)字符串格式化 格式字符串要加双引号82836. Shell函数函数功能功能:Shell函数负责执行一
59、个可执行文件(扩展名为.exe、.com、.bat),返回一个Variant,如果成功,代表这个程序的进程ID,若不成功,则会返回0。 形式形式: Shell(命令字符串,窗口类型) 缺省窗口类型最小化为图标。 84X=shell(“c:windowspbrush.exe”,1)Y=shell(“c:windowswrite.exe”,1)Z=shell(“C:Program FilesMicrosoft OfficeOfficewinword.exe”,1)提示:提示:如果不知道应用程序的路径名,可用Start命令启动程序 i = Shell(start & calc.exe) ; i =
60、Shell(start & “vb6.exe“)举例:举例:i = Shell(c:windowscalc.exe ,1) j = Shell(c:, 1)853.5 3.5 基本语句基本语句3.5.1 3.5.1 赋值语句赋值语句 形式: LET变量名表达式变量名表达式 作用: 将表达式的值赋值给变量名. 一般用于给变量赋值或对控件设定属性值. 例: sRate!=0.1 Text1.Text 欢迎使用Visual Basic 6.0”注意:注意:1、当表达式的类型与变量的类型不一致时,强制转换成左边的精度。如: iA% = 10 / 3 iA中的结果为32、虽然赋值号与关系运算符等于号都用
61、“=”表示,VB系统会根据所处的位置自动判断是何种意义的符号。3、赋值号左边只能是变量,不能是常量或表达式。4、不能在一句赋值语句中,同时给多个变量赋值。 863.5.2 3.5.2 人机交互函数和过程人机交互函数和过程VB与用户之间的直接交互是通过InputBox()函数、MsgBox()函数和MsgBox过程进行的。 1.InputBox1.InputBox函数函数 InputBoxInputBox( (提示提示 ,标题,标题,缺省,缺省,x x 坐标位置坐标位置,y y坐标位置坐标位置) 其中:提示 提示信息,标题 对话框标题,缺省输入区缺省值 函数返回字符类型. 例要在屏幕上显示图示的
62、对话框:87相应的语句如下:Dim strName As String * 40 strName= InputBox( “请输入你的姓名” + vbCrLf + “然后单击确定” , “输入框” )也可以使用如下语句:Dim strName As String * 40, strS1 As String * 40strS1 = “请输入你的姓名” + Chr(13) + Chr(10) + “然后单击确定” strName= InputBox(strS1, “输入框”, , 100,100) 当键盘输入“王晓明” 后,变量strName获得键盘输入的值.882. 2. MsgBoxMsgBox
63、函数和函数和MsgBoxMsgBox过程过程 函数形式:变量% = MsgBox(提示,按钮,标题) 过程形式: MsgBox 提示,按钮,标题 按钮值如下: 函数返回所选按钮整数值:89例例3.2 编一帐号和密码检验程序。要求: 帐号不超过6位数字,有错,清除原内容再输入. 密码输入时在屏幕上以 “*”代替; 若密码错,显示有关信息,选择“重试”按钮,清除原内容再输入,选择“取消”按钮,停止运行。分析: 帐号6位,MaxLength为6 , LostFocus判断数字IsNumeric函数 密码PassWordChar为“*”,MsgBox函数设置密码错对话框.903.5.3 3.5.3 选
64、选 择择 结结 构构 1. IfThen1. IfThen语句语句( (单分支结构单分支结构) ) If Then 语句块语句块 End If 或或 If Then 例:已知两个数x和y,比较它们的大小,使得x大于y. If xy Then t=x x=y y=t End If 或或 If xy Then t=x: x=y: y=t912. IfThenElse2. IfThenElse语句语句( (双分支结构双分支结构) )(1) If Then Else End If (2)If Then Else 计算分段函数单分支结构实现: if x=0 then y=cos(x)x3+3*x If
65、x0 Then y=sin(x)+sqr (x*x+1) 双分支结构实现: If x0 Then y=sin(x)+sqr (x*x+1) Else y=cos(x)x3+3*x End If923. IfThen3. IfThenElseIfElseIf语句语句( (多分支结构多分支结构) ) 形式: If Then ElseIf Then Else 语句块语句块 n+1 End If93例例 已知变量strC中存放了一个字符,判断该字符是字母字符、数字字符还是其他字符。用多分支结构实现用多分支结构实现: If Ucase(strC) =A And Ucase (strC) =0 And s
66、trC =9 Then Print strC + 是数字字符 Else Print strC + 其他字符 End If不管有几个分支,依次判断,当某条件满足,执行相应的语句,其余分支不再执行;若条件都不满足,且有Else子句,则执行该语句块,否则什么也不执行。. ElseIf不能写成 Else If。94例例 已知百分制成绩mark,显示对应的五级制成绩 哪些正确,哪些错误?正确:方法一、二正确:方法一、二错误:方法三错误:方法三954 4IfIf语句的嵌套语句的嵌套 If语句的嵌套是指If或Else后面的语句块中又包含If语句。 形式如下: If Then If Then End If E
67、nd If 例例 已知x,y,z三个数,使得xyz用一个IF语句和一个嵌套的IF语句实现 If xy Then t=x: x=y: y=t If yz Then t=y: y=z: z=t If xy Then t=x: x=y: y=t End If End IfIf语句的嵌套注意事项:书写锯齿型;End If与它前面最近的if配对。96:与的类型必须相同,可以是下面四种形式之一: 表达式 例: A 一组枚举表达式(用逗号分隔) 2,4,6,8 表达式1 To 表达式2 60 To 100 Is 关系运算符表达式 Is 20 and Is40”是不合法的不合法的。l而“Case Is20”是
68、正确的。98例例 变量strC中存放了一个字符,判断该字符类型。用多分支结构实现用多分支结构实现: If Ucase(strC) =A And Ucase (strC) =0 And strC 0 And y 0 Then Print 在第一象限ElseIf x 0 Then Print 在第二象限ElseIf x 0 And y 0 And y 0 And y 0Print 在第一象限 Case x 0Print 在第二象限 Case x 0 And y 0 And y y,x,y) (2) Switch函数形式是:Switch(条件表达式条件表达式1,条件表达式,条件表达式1为为True时
69、的值时的值 ,条件表达式,条件表达式2,条件表达式,条件表达式2为为True时的值时的值)102(3)Choose函数形式是:函数形式是:l Choose(数字类型变量,值为(数字类型变量,值为1的返回值,的返回值,值为值为2的返回值的返回值)l 例如:Nop是1-4的值,转换成 + 、-、运算符l Op= Choose(Nop,“+,-,) 当值为1,返回字符串“+”,然后放入Op变量中,值为2,返回字符 串“-”,依次类推;当Nop是1-4的非整数,系统自动取Nop的整数办法在判断;若Nop不在1-4之间,函数返回Null值。1031在选择结构中缺少配对的结束语句对多行式的If块语句中,应
70、有配对的 End If语句结束。2. 多边选择ElseIf关键字的书写和条件表达式的表示 ElseIf 不要写成Else If; 多个条件表达式次序问题3. Select Case语句的使用 Select Case 后不能出现多个变量;Case子句后不能出现变量本节常见错误本节常见错误1043.5.4 3.5.4 循循 环环 结结 构构1. For循环语句循环语句 (一般用于循环次数已知)形式 For 循环变量初值循环变量初值 to 终值终值 Step 步长步长 语句块语句块Exit For 语句块语句块 Next 循环变量循环变量 循环变量 =终值 语句块 Exit For 语句块 循环变量
71、加步长 T F 循环变量得初值 循环体例 计算1100的奇数和 Dim i %, s% 等价于: Dim i %, s% s=0 s=0 : i = 1 For i = 1 To 100 step 2 re: If i 0 初值终值 =1 时,可省略终值=0 死循环循环次数要注意:要注意:v 出了循环,循环控制变量值的问题。 例程序段: For i=2 To 13 Step 3 循环执行次数 Print i , 输出 i的值分别为: Next i 2 5 8 11 Print : Print “I=“, i 出了循环输出为: I=14v 在循环体内对循环控制变量可多次引用;但最好不要对其赋值,
72、否则影响原来的循环控制规律。步长106例 改变循环控制变量对循环的影响。Private Sub Command1_Click() j = 0 For i = 1 To 20 Step 2 i = i + 3 j = j + 1 Print 第; j; 次循环i=; i Next i Print 退出循环后i=; i End Sub正常情况:i=1,3,5,7,9,11,13,15,17,19现在:i=4,9,14,19例 输出可打印的ASCII码字符与它的编码值。 1072. DoLoop循环语句循环语句(用于控制循环次数未知)形式1: Do While|Until 语句块语句块 Exit D
73、o 语句块语句块 Loop形式2:Do 语句块语句块 Exit Do 语句块语句块Loop While|Until 108例 我国有13亿人口,按人口年增长0.8%计算,多少年后我国人口超过26亿。分析:解此问题两种方法,可根据公式:26=13*(1+0.008)n 直接利用标准对数函数求得;也可利用循环求得,程序如下:Private Sub Command1_Click() x = 13 n = 0 Do While x n; (2) m除以n得余数r; (3)若r=0,则n为最大公约数结束;否则执行(4); (4)mn,nr,再重复执行(2)。 例 求 m=14 ,n=6 的最大公约数.
74、If m n Then t = m: m = n: n = t r=m mod n Do While (r 0) m=n n=r r= m mod n Loop Print 最大公约数最大公约数=, n m n r 14 6 2 6 2 0辗转相减法 m=m-n mn n=n-m nm m、n为公约数 m=nDo While m n m n If m n Then 14 6 m = m n 8 6 Else 2 6 n = n m 2 4 End If 2 2Loop1103、While Wend循环:(类似于循环:(类似于Do WhileLoop)格式为格式为:While Wend执行过程执
75、行过程:先计算表达式的值,如果表达式的值为True,则执行循环体,遇到Wend语句后,返回到While语句并再对条件进行测试,如为True,则继续执行循环体,如为False,则退出循环体。例例:计算1+2+3+100Dim i as integer,s as integeri=1s=0While iaver then n=n+1 next i1182、数组的概念、数组的概念 数组不是一种数据类型,而是一组相同类型的变数组不是一种数据类型,而是一组相同类型的变量的集合。量的集合。在程序中使用数组的最大好处是用一个数在程序中使用数组的最大好处是用一个数组名代表逻辑上相关的一批数据,用下标表示该数组
76、组名代表逻辑上相关的一批数据,用下标表示该数组中的各个元素,和循环语句结合使用,使得程序书写中的各个元素,和循环语句结合使用,使得程序书写简洁。简洁。 数组元素:数组元素:数组中的某一个数据项。数组元素的使数组中的某一个数据项。数组元素的使用同简单变量的使用。用同简单变量的使用。数组:数组:必须先声明后使用。必须先声明后使用。两类数组:两类数组: 静态静态(定长定长)数组、动态数组、动态(可变长可变长)数组。数组。1193 3、静态数组及声明静态数组及声明静态数组:静态数组:在声明时已确定了数组元素个数。在声明时已确定了数组元素个数。形式形式: : Dim 数组名数组名(下标下标1,下标下标2
77、) As 类型类型 维数:维数:几个下标为几维数组,最多几个下标为几维数组,最多60维。维。 下标:下标: 下界下界 To 上界上界 下界最小为下界最小为32768,上界最大为上界最大为32767,省略下界为省略下界为0 。下标必须为常。下标必须为常数,不可以为表达式或变量。数,不可以为表达式或变量。 每一维大小:每一维大小: 上界下界上界下界+1 数组大小:数组大小: 每一维大小的乘积每一维大小的乘积As类型:类型:如果省略,默认为变体类型如果省略,默认为变体类型 例:例:Dim mark(1 to 100) As Integer120lDim lArray( 0 To 3, 0 To 4)
78、 As Long 共有 45个元素l等价于: Dim lArray(3, 4) As Long注意:注意: (1)下界缺省为下界缺省为0,也可再重新定义数组的缺省下界为,也可再重新定义数组的缺省下界为1。 Option Base 1121l注意:注意:(2)在静态数组声明时的下标只能是常数静态数组声明时的下标只能是常数,而在其他地方出现的数组元素的下标可以是变量,要加以区分。如: n =Inputbox(“输入输入n”) Dim x(n) As Single 错误的声明,下标是变量错误的声明,下标是变量 x(n)=100 数组元素的下标可以是变量,但要防止下标越界的错误发生 (3)在数组声明中
79、的下标说明了数组的整体,即每维的大小;而在程序其他地方出现的下标表示数组中的一个元素。两者写法形式相同,但意义不同。例如:Dim x(10) As Integer 声明了x数组有11个元素 x(10)=100 对x(10)这个数组元素赋值122l4、动态数组及声明动态数组及声明 动态数组是指在声明数组时未给出数组的大小(省略括号中的下标),当要使用它时,随时用ReDim语句重新指出数组大小。形式如下: Dim 数组名( ) ReDim 数组名(下标1,下标2) As 类型 例例 Sub Form_Load( ) Dim x( ) As Single n =Inputbox(“输入输入n”) R
80、eDim x(n) End Sub123l注意注意l Dim、Private、Public变量声明语句是说明性语句,可出现在过程内或通用声明段;ReDim语句是执行语句,只能语句是执行语句,只能出现在过程内。出现在过程内。l 在过程中可多次使用ReDim来改变数组的大小和维数。l 使用ReDim语句会使原来数组中的值丢失,可以在ReDim语句后加Preserve参数来保留数组中的数据。使用Preserve只能改变最后一维的大小,前面几维大小不能改变。 lReDim中的下标可以是常量,也可以是有了确定值的变量。中的下标可以是常量,也可以是有了确定值的变量。l 静态数组在程序编译时分配存储单元,动
81、态数组在运行时分配存储单元。124l例:Redim和 Preserve语句的使用Dim a() as integerPrivate Sub Form_Click()Dim a() As IntegerReDim a(3, 2)For i = 0 To 3 For j = 0 To 2 a(i, j) = i * j Print a(; i; ,; j; )=; a(i, j); Next jNext iEnd Sub125lPrivate Sub Form_Click()lDim a() As IntegerlReDim a(3, 2)lFor i = 0 To 3l For j = 0 To
82、 2l a(i, j) = i * j Next jlNext ilReDim Preserve a(3, 4)lFor j = 3 To 4l a(3, j) = j + 10lNext jlFor i = 0 To 3l For j = 0 To 4l Print a(; i; ,; j; )=; a(i, j); l Next jlNext ilEnd Sub1265 5、 数组的基本操作数组的基本操作应掌握的基本操作有:数组初始化、数组输入、输出、求数组中最大(最小)元素及下标、求和、平均值、排序和查找等。A. A. 数组元素的赋初值数组元素的赋初值 (1)用循环 Dim ia(1 t
83、o 10) As Integer For i = 1 To 10ia(i)=0 Next i (2) Array函数 Dim ib As Variant ib = Array(“abc”, “def”, “67”) ib数组有数组有3个元素,上个元素,上界为界为2 For i = 0 To UBound(ib) Picture1.Print ib(i); ; Next i127l注意注意l利用利用Array对数组各元素赋值,声明的数组是可变数组或连圆括号都对数组各元素赋值,声明的数组是可变数组或连圆括号都可省的数组,并且其类型只能是可省的数组,并且其类型只能是Variant。l数组的下界为零,
84、上界由数组的下界为零,上界由Array函数括号内的参数个数决定,也可通函数括号内的参数个数决定,也可通过函数过函数Ubound获得上界,获得上界,Lbound获得下界。获得下界。l赋值号左边的数组只能声明为赋值号左边的数组只能声明为Variant的可调数组或简单变量。的可调数组或简单变量。l赋值号两边的数据类型必须一致。赋值号两边的数据类型必须一致。B数组的赋值数组的赋值数组直接对数组的赋值:Dim a() As Variant, b() As Variant, i%a = Array(1, 2, 3, 4, 5)ReDim b(UBound(a)b = a For i = 0 To UBou
85、nd(a) b(i) = a(i)Next i128lC .数组的输入数组的输入: 可通过文本框,也可通过可通过文本框,也可通过inputbox函数输入。函数输入。lD.数组的输出数组的输出: 输出方阵SC中的下三角元素 For i = 0 To 4 For j = 0 To i sc(i, j) = i * 5 + j Print sc(i, j); ; Next j Print 换行换行 Next i129E. E. 求数组中最大元素及所在下标及各元素之和求数组中最大元素及所在下标及各元素之和 Dim Max%,iMax %,s%, iA(1 to 10) As Integer Max=i
86、A(1):iMax=1:s=iA(1) For i = 2 To 10 s=s+iA(i) If iA(i)Max ThenMax=iA(i)iMax=i End If Next iF. F. 将数组中各元素交换将数组中各元素交换 For i =1 To 102 t=iA(i) iA(i)=iA(10-i+1) iA(10-i+1)=t Next i1306 6、数组的应用、数组的应用 a. a. 统计统计: : 输入一串字符,统计各字母出现的次数,不区分字母大小写。 分析:分析:统计26个字母出现的个数,先声明一个具有26个元素的数组,每个元素的下标表示对应的字母,元素的值表示对应字母出现的
87、次数。从输入的字符串中逐一取出字符,转换成大写字符(不区分大小写),进行判断。 Asc(“A”)=65 Asc(“Z”)=122 Asc(“a”)=97 Asc(“z”)=90Dim a(1 to 26) as integerDim c as string*1Le=len(Text1)For I = 1 To le c = UCase(Mid(Text1, I, 1) If c = A And c = Z Then j = Asc(c) - 65 + 1 a(j) = a(j) + 1 End IfNext I131b.b.数组排序(选择法)数组排序(选择法)对已知存放在数组中的n个数,用选择
88、法按递增顺序排序。(1) 从n个数中选出最小数的下标(递增),然后将最小数与第1个数交换位置;(2) 除第1个数外,其余n-1个数再按(1)的方法选出次小的数,与第2个数交换位置;(3) 重复(1)n-1遍,最后构成递增序列。 For i = 1 To n - 1 进行进行n-1轮比较轮比较 iMin= i 对第对第i轮比较时,初始假定第轮比较时,初始假定第i个元素最小个元素最小 For j = i+1 To n 在数组在数组in个元素中选最小元素的下标个元素中选最小元素的下标 If iA(j) iA(iMin) Then iMin = j Next j t= iA(i): iA(i) = i
89、A(iMin) : iA(iMin) = t将最小元素与第将最小元素与第i个元素交换个元素交换 Next i 132c.c.排序(冒泡法)排序(冒泡法)选择法排序在每一轮排序时找最小(递增次序)数的下标,出了内循环(一轮排序结束),再交换最小数的位置;而冒泡法排序在每一轮排序时只要冒泡法排序在每一轮排序时只要将第一个与其它几个比较将第一个与其它几个比较(或者将相邻的数两两比较或者将相邻的数两两比较),只要次序不对就交,只要次序不对就交换,出了内循环,最小数已冒出。换,出了内循环,最小数已冒出。 For i = 1 To n-1 进行n-1轮比较 For j = i+1 To n 将第一个与i+
90、1n个元素进行比较 If iA(j) iA(i) Then 若次序不对,则马上进行交换位置 t = iA(j) : iA(j) = iA(i) : iA(i) = t End If Next j 出了内循环,一轮排序结束,最小数已冒到最上面 Next i133d.d.排序(冒泡法)排序(冒泡法)冒泡法排序:将相邻的两个数两两比较,只要次序不对就交换,出了内循环,最小数已冒出。排序进行的过程见下表。 For i = 1 To n-1 进行n-1轮比较 For j = n To i+1 step -1 从ni个元素进行两两比较 If iA(j) iA(j-1) Then 若次序不对,则马上进行交换
91、位置 t = iA(j) : iA(j) = iA(j-1) : iA(j-1) = t End If Next j 出了内循环,一轮排序结束,最小数已冒到最上面 Next i134e.e.数组元素的插入与删除数组元素的插入与删除: : (1) 插入插入 在有序数组a(1 to n)(原有n-1个元素)插入一个值Key元素,算法:查找要插入的位置k(1=k 0 s= Left(s, i - 1) + NewS + Mid(s, i + lenOldS) i = InStr(s, OldS) Loop MyReplace = s End FunctionPrivate Sub Command1_
92、Click() s= “VB程序设计教程5.0版” ss= MyReplace(s, 5.0, 6.0) S ”5.0” ”6.0”MyReplace(s$, OldS$, NewS$) 程序运行的流程程序运行的流程 :147二、二、 子过程子过程 函数过程给编程带来了优点但也有不足:函数过程给编程带来了优点但也有不足: (1)若编写过程,不是为了获得某个函数值,而是为了某种功能的处理,)若编写过程,不是为了获得某个函数值,而是为了某种功能的处理,如控件的移动;(如控件的移动;(2)或者要获得多个结果,如对一组数的排序等。此时)或者要获得多个结果,如对一组数的排序等。此时用函数过程,有些不便。
93、用函数过程,有些不便。VB中提供了功能更强、使用更灵活的子过程。中提供了功能更强、使用更灵活的子过程。 1.1.引引例例 编写一个两个数交换的过程供多次调用。编写一个两个数交换的过程供多次调用。Swap (x,y)子过程的定义子过程的定义主调程序调用主调程序调用Swap子过程子过程Public Sub Swap(x, y) Private Sub Form_Click() Dim t Dim a, b t = x a = 10 x = y b = 20 y = t Call Swap (a, b)或者或者 Swap a,bEnd Sub Print a=;a,,b=; b End Sub148
94、2.2.子过程定义:子过程定义: StaticPublicPrivateSub 子过程名子过程名(参数列表) 局部变量或常数定义 语句块 Exit Sub 语句块 End Sub子过程体子过程名、参数列表规定同函数过程中对应项的规定,但当无形参时,括号也应无4.4.子过程与函数过程区别子过程与函数过程区别:(1)函数过程名有值,有类型,在函数体内至少赋值一次; 子过程名无值,无类型,在子过程体内不能对子过程名赋值;(2)调用时,子过程调用是一句独立的语句。 函数过程不能作为单独的语句加以调用,必须参与表达式运算。(3)用函数过程和子过程没有严格的规定,但只要能用函数过程定义的,肯定能用子过程定
95、义,反之不一定。即子过程适用面广。一般当过程有一个函数值,使用函数过程较直观; 反之若过程无返回值,或有多个返回值,使用子过程较直观3.3.子过程的调用子过程的调用 子过程名子过程名 参数列表 或 Call 子过程名子过程名(参数列表)149例分别编一计算某级数部分和的子过程和函数过程,并调用。级数为: 精度为:函数过程实现求部分级数和 Function Function jishu1jishu1(x!, (x!, epseps#)#) As Double Dim n%, s#, t#n = 1: s = 0: t = 1Do While (Abs(t) = eps) s = s + t t
96、= t * x / n n = n + 1Loop jishu1 = s jishu1 = sEnd FunctionEnd Function子过程实现求部分级数和 Sub jishu2Sub jishu2(s#s#, x!, eps#) Dim n%, t#n = 1: s = 0: t = 1Do While (Abs(t) = eps) s = s + t t = t * x / n n = n + 1LoopEnd SubEnd Subf1 = jishu1(2, 0.000001) 调用函数过程Call jishu2(f2, 2, 0.000001) 调用子过程或 jishu2 f2
97、,2,0.00001 150 程序运行流程:程序运行流程: Private Sub Command1_Click() Dim f1#, f2# f1 = jishu1(2, 0.000001) Call jishu2(f2, 2, 0.000001) Print f1=; f1, f2 = ; f2 End SubSub jishu2(s#, x!, eps#) s=表达式表达式End Sub找子过程名调用找子过程名调用jishu2Function jishu1(x!, eps#) As Doubl jishu1=表达式表达式End Function找函数名调用找函数名调用jishu1jish
98、u1函数名带了值返回函数名带了值返回 151三、三、 参数传递参数传递在调用过程时,一般主调过程与被调过程之间有数据传递,即主调过在调用过程时,一般主调过程与被调过程之间有数据传递,即主调过程的实参传递给被调过程的形参(虚参),完成实参与形参的结合,然后程的实参传递给被调过程的形参(虚参),完成实参与形参的结合,然后执行被调过程体。执行被调过程体。在在VB中,实参与形参的结合有两种方法:中,实参与形参的结合有两种方法:传址传址(ByRef)与传值与传值(ByVal),其中传址又称为引用,是默认的方法。其中传址又称为引用,是默认的方法。区分区分两种结合的方法是两种结合的方法是在要在要使用传值的形
99、参前加有使用传值的形参前加有“ByVal”关键字。关键字。1. 1. 传址与传值传址与传值 传址:传址: 形参得到的是实参的地址,形参值的改变同时也改变实参的值。形参得到的是实参的地址,形参值的改变同时也改变实参的值。 传值:传值: 形参得到的是实参的值,形参值的改变不会影响实参的值。形参得到的是实参的值,形参值的改变不会影响实参的值。 选用传值还是传址的使用规则:选用传值还是传址的使用规则:(1)形参是数组、自定义类型时只能用传址方式,若要将过程中的结果)形参是数组、自定义类型时只能用传址方式,若要将过程中的结果返回给主调程序,则形参必须是传址方式。这时实参必须是同类型的变量返回给主调程序,
100、则形参必须是传址方式。这时实参必须是同类型的变量名,不能是常量或表达式。名,不能是常量或表达式。(2)若形参不是()若形参不是(1)中的两种情况,一般应选用传值方式。这样可增加)中的两种情况,一般应选用传值方式。这样可增加程序的可靠性和便于调试,减少各过程间的关联。程序的可靠性和便于调试,减少各过程间的关联。152例例 两个变量的交换Sub Swap1(ByVal x%, ByVal y%) t% = x: x = y: y = tEnd SubSub Swap2(x%, y%) t% = x: x = y: y = tEnd SubPrivate Sub Command1_Click() a
101、% = 10: b% = 20 Swap1 a, b 传值传值 Print A1=; a, B1=; b a = 10: b = 20 Swap2 a, b 传址传址 Print A2=; a, B2=; bEnd Sub运行结果A1=10 B1=20A2=20 B2=101532. 2. 数组参数的传递数组参数的传递 在VB中允许参数是数组,数组只能通过传址方式进行传递。 在传递数组时要注意: 在实参和形参中可只写数组名,或忽略维数的定义,但圆括号不能省。 被调过程可通过Lbound和Ubound函数确定实参数组的下、上界。 例 编一函数tim,求任意一维数组中各元素之积。 调用tim,求
102、和 Function tim(a() As Integer) Dim t#, i% t = 1 For i = Lbound(a) To Ubound(a) t = t * a(i) Next i tim = tEnd Function调用:调用:Sub Command1_Click() Dim a%(1 To 5),b%(3 To 8) t1# = tim(a() t2 #= tim(b() Print t1, t2 End Sub154四、变量、过程的作用域四、变量、过程的作用域作用域:变量、过程可被访问的范围。变量、过程随所处的位置不同,可被访问的范围不同。 1.1.过程的作用域过程的作
103、用域 窗体/模块级:加Private关键字的过程,只能被定义的窗体或模块中的过程调用。 全局级:加Public关键字(缺省)的过程,可供该应用程序的所有窗体和所有标准模块中的过程调用。1552. 2. 变量的作用域变量的作用域 局部变量局部变量:在过程内用:在过程内用Dim声明的变量(或不加声明直接使用声明的变量(或不加声明直接使用的变量),只能在本过程中使用。的变量),只能在本过程中使用。 窗体窗体/模块级变量模块级变量:在:在“通用声明通用声明”段中用段中用Dim语句或用语句或用Private语句声明的变量语句声明的变量,可被本窗体可被本窗体/模块的任何过程访问。模块的任何过程访问。 全局
104、变量全局变量:在:在 “通用声明通用声明”段中用段中用Public语句声明的变量,可语句声明的变量,可被本应用程序的任何过程或函数访问。被本应用程序的任何过程或函数访问。156例如在下面一个标准模块文件中不同级的变量声明:Public Pa As integer 全局变量Private Mb As string *10 窗体/模块级变量Sub F1( ) Dim Fa As integer 局部变量End SubSub F2( ) Dim Fb As Single 局部变量End Sub157若在不同级声明相同的变量名若在不同级声明相同的变量名, ,系统按局部、窗体系统按局部、窗体/ /模块、
105、全局次模块、全局次序访问(即优先访问作用域小的变量名)。序访问(即优先访问作用域小的变量名)。如: Public Temp As integer 全局变量 Sub Form_Load() Dim Temp As Integer 局部变量 Temp=10 访问局部变量 Form1.Temp=20 访问全局变量必须加窗体名 Print Form1.Temp, Temp 显示 20 10 End Sub1583. 3. 静态变量静态变量局部变量声明:局部变量声明: Dim 声明声明,随过程的调用而分配存储单元,每次调用都对变量初始,随过程的调用而分配存储单元,每次调用都对变量初始化;过程体结束,变量
106、的内容自动消失,存储单元释放。化;过程体结束,变量的内容自动消失,存储单元释放。 Static 声明声明,每次调用过程,变量保持原来的值。,每次调用过程,变量保持原来的值。 声明形式:声明形式:Static 变量名变量名 AS 类型类型 Static Function 函数过程名函数过程名(参数列表参数列表) As 类型类型 Static Sub 子过程名子过程名(参数列表参数列表)过程名前加过程名前加Static,表示该过程内的局部变量都是静态变量。表示该过程内的局部变量都是静态变量。例例比较比较Dim和和Static的区别。的区别。 Private Sub Form_Click() Dim
107、 i% ,isum% For i = 1 To 5isum = sum(i)Print isum; Next i End SubPrivate Function sum(n As Integer) Dim j As Integer j = j + n sum = jEnd Function结果为:1 2 3 4 5Static j As Integer,结果?结果为:1 3 6 10 15159Sub f1(x) x=f2(xx)*3End SubSub Command1_Click() Call f1(y)End SubFunction f2(x) f2=f3(x)+3End SubFunc
108、tion f3(x) f3=x*xEnd SubSub f1(x) Call f1(y)End Sub过程的直接调用过程的直接调用Sub Command1_Click() Call f1(y)End Sub过程的递归调用过程的递归调用五、递归五、递归: :1601.1.递归的概念递归的概念 用自身的结构来描述自身就称为“递归”。例对阶乘的定义: 2. 递归过程递归过程 过程在自身定义的内部调用自己。 例例 编fac(n)=n! 的递归函数 Function fac(n As Integer) As Integer If n = 1 Then fac = 1 Elsefac = n * fac(
109、n - 1) End If End FunctionSub Command1_Click() Print “fac(4)=”;fac(4)End Sub结果:fac(4)=24161递推回归在递归处理中,用栈来实现。栈中存放形参、局部变量、返回地址。在递归处理中,用栈来实现。栈中存放形参、局部变量、返回地址。递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。回归过程:不断从栈中弹出当前的参数,直到栈空。回归过程:不断从栈中弹出当前的参数,直到栈空。注意:注意:1、递归算法设计简单,但消耗的机时和占据的内存空间比非、递归算法设计简
110、单,但消耗的机时和占据的内存空间比非 递归大。递归大。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)162例例利用递归求最大公约数Public Function gcd(m As Integer, n As Integer) As Integer If (m Mod
111、n) = 0 Then gcd = n Else gcd = gcd(n, m Mod n) End IfEnd FunctionPrivate Sub Form_Click() Print gcd(10, 4)End Sub163分析以下子过程的功能 ,当n=100,r=8,结果是多少?Public Sub f(ByVal n %, ByVal r %) If n r Then Call f(n r, r) Print n Mod r; End SubPrivate Sub Command1_Click() Call f(100, 8)End Sub显示结果显示结果 1 4 4164例:打印
112、分形图从一个大的等边三角形开始,将其三条边的中点进行连线,分成相同的4个三角形,除中间外的3个三角形再重复上述过程,直到满足给定条件的底层为止。实现该方法采用递归子过程程序最简洁。165lPrivate Sub Picture1_Click()lDim n As Integerln = InputBox(输入输入n的值的值)lPicture1.Print Tab(5); 递归递归n= & n & 时的图形时的图形lPicture1.Scale (0, 600)-(600, 0)lCall triangle(30, 320, 570, 30, 570, n)lEnd SublPrivate Su
113、b triangle(x1!, x2!, x3!, y1!, y2!, k%)lDim u1!, v1!, u2!, v2!lIf (k 1) Thenl u1 = (x1 + x2) / 2l u2 = (x2 + x3) / 2l v1 = (y1 + y2) / 2l Call triangle(u1, x2, u2, v1, y2, k - 1)l Call triangle(x1, u1, x2, y1, v1, k - 1)l Call triangle(x2, u2, x3, y1, v1, k - 1)lElsel Picture1.Line (x1, y1)-(x3, y1)
114、l Picture1.Line (x1, y1)-(x2, y2)l Picture1.Line (x2, y2)-(x3, y1)lEnd IflEnd Sub166本节重点和难点本节重点和难点 1. 1. 确定自定义的过程是子过程还是函数过程确定自定义的过程是子过程还是函数过程 函数过程名有值,子过程名无值。 过程有一个返回值,则使用函数过程; 若返回多个值或无返回值,一般使用子过程。2 2过程中形参的个数和传递方式的确定过程中形参的个数和传递方式的确定 过程中参数的作用是实现过程与调用者的数据通信。 (1)从主调程序获得初值,值传递。 (2)将结果返回给主调程序,地址传递。3. 3. 实
115、参与形参结合时对应问题实参与形参结合时对应问题 个数、类型、位置、次序一一对应。 形参是值传递,对应实参可以是表达式、常量、数组元素。 形参是地址传递,对应实参只能是简单变量。 4 4、数组、记录类型、对象只能是地址传递。、数组、记录类型、对象只能是地址传递。1674. 4. 变量的作用域问题变量的作用域问题 局部变量、静态变量、全局变量特点、作用 5. 5. 递归调用出现递归调用出现“栈溢出栈溢出”递归过程中有终止的条件和终止时的值或某种操作; 每递归调用一次,其中的参数要向终止方向收敛。168递归常见错误:递归常见错误:递归调用出现“栈溢出” 在递归调用时,其中的参数要向终止方向收敛。如下
116、求阶乘的递归函数过程: Public Function fac(n As Integer) As IntegerIf n = 1 Then fac = 1Else fac = n * fac(n - 1)End IfEnd FunctionPrivate Sub Command1_Click() Print “fac(5)=”;fac(5) Print “fac(5)=”;fac(-5) 栈溢出栈溢出End Sub1693.8 3.8 常用算法举例常用算法举例算法是对某个问题求解过程的描述 一、若干初等数学问题:一、若干初等数学问题:1.1.累加、连乘累加、连乘 1100的5或7的倍数的和 S
117、um = 0 For i = 1 To 100 If i Mod 5 = 0 Or i Mod 7 = 0 Then Sum = Sum + i End If Next i Print Sum 310的乘积 t = 1 For i =3 To 10 t = t * i Next i Print t170例例 求自然对数e的近似值,要求其误差小于0.00001,近似公式为: 该例题涉及两个问题: (1)用循环结构求级数和的问题。本例根据某项值的精度来控制循环的结束与否。 (2)累加:e=e+t 循环体外对累加和的变量清零 e=0 连乘:n=n*i 循环体外对连乘积变量置1 n=1 Private
118、 Sub Form_Click()Private Sub Form_Click() Dim i%,n&, t!, e! Dim i%,n&, t!, e! e = 0 : n = 1 e = 0 : n = 1 e存放累加和、n存放阶乘 i = 0 : t = 1 i = 0 : t = 1 i计数器、t第i项的值 Do While t 0.00001Do While t 0.00001 e = e + t : i = i + 1 e = e + t : i = i + 1 累加、连乘 n = n * i : t = 1 / nn = n * i : t = 1 / n Loop Loop P
119、rint Print 计算了计算了 ; i; ; i; 项的和是项的和是 ; e; eEnd SubEnd Sub1712.求素数求素数素数是一个大于2,且不能被1和本身以外的整数整除的整数。 判别某数m是否为素数最简单的方法是:对于m 从 i=2,3,m-1判别m能否被i整除,只要有一个能整除,m不是素数,否则m是素数。例例 求100以内素数的代码: For m = 2 To 100 For i = 2 To m - 1 If (m Mod i) = 0 Then GoTo NotNextM Next i Print mNotNextM: Next mm是否为素数求100以内的素数思考:思考
120、: 此例用GoTo语句对非素数不作判断,若不用GoTo语句,如何修改程序? 例:用筛选法求素数1723.3.穷举法穷举法 “穷举法”也称为“枚举法”或“试凑法”, 即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。 例例 百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。 设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为: x+y+ z =100 3x+2y+0.5z=100三个未知数,两个方程,此题有若干个解。解决此类问题采用“试凑法”,把每一种情况都考虑到。 方法一:最简单三个未知数利
121、用三重循环来实现。方法一:最简单三个未知数利用三重循环来实现。 方法二:从三个未知数的关系,利用两重循环来实现。方法二:从三个未知数的关系,利用两重循环来实现。1734.4.递推法递推法 “递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。 例例 猴子吃桃子。小猴在某天摘桃若干个,当天吃掉一半多一个;第二天吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半多一个,到第7天要吃时只剩下一个,问小猴共摘下了多少个桃子?分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数
122、第三天的桃子。设第n天的桃子为xn,那么它是前一天的桃子数的xn-1 的一半减1,即xn-1 = (xn +1)*21745.5.最小、最大值最小、最大值在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较。例例 随机产生随机产生1010个个100100200200之间的数,求最大值。之间的数,求最大值。 Private Sub Command1_Click() Max = 100 For i = 1 To 10 x = Int(Rnd * 101 + 100)
123、 Print x; If x Max Then Max = x Next i Print Print 最大值=; MaxEnd Sub175 6 6、数制转换数制转换 例 将一个十进制整数m转换成 r (216)进制字符串。 方法:将m不断除 r 取余数,直到商为零,以反序得到结果。1767 7、例例 加密和解密加密和解密简单加密的思想是: 将每个字母C加一序数K,式子 c=chr(Asc(c)+k), 例如序数k为5,这时 “A”“F”, “a”“f”,“B”“G” 当加序数后的字母超过“Z”或“z”则 c=hr(Asc(c)+k -26)。 解密为加密的逆过程。177二、排序二、排序选择、
124、冒泡、插入法排序、合并排序等。前两种排序欲排序的数据全部输入后,再进行排序;插入法排序每输入一项,马上插入到数组应在的位置,数组始终有序。例例 插入排序,插入排序,实现的步骤: (1)输入欲排序的数据项x;在数组a中找x应所处的位置j; (2)从数组的最后一个元素开始到下标j依次往后移,使j位置空出; (3)将x放入位置j处,一个数据插入完成; (4)有若干个数重复(1)(3)。178例例 合并排序合并排序,将两个有序的数组合并成另一个有序的数组。假设有序的数组为A、B,合并后的数组为C。合并排序的思想为:(1)先在A、B数组中各取第一个元素进行比较,将小(递增次序)的元素放入C数组;(2)取
125、小的元素所在数组的下一个元素与上次比较后较大的元素比较,重复上述过程,直到某个数组被先排完;(3)将另一个数组剩余元素抄入C数组,合并排序完成。179三、查找三、查找 1、顺序查找、顺序查找 。 顺序查找根据查找的关键值与数组中的元素逐一比较(数组可无序)Public Sub Search(a() As Variant, ByVal key As Variant, index%) Dim i% For i = LBound(a) To UBound(a) If key = a(i) Then 找到,元素的下标在index中,结束查找 index = i Exit Sub End If Next
126、 i index = -1 找不到, index形参的值为-1End Sub平均查找次数平均查找次数 n/2180Keya(mid) low=mid+1 查找区域缩小一半,继续直到找到或查找区域中无元素.本例用递归实现 Sub birsearch(a(), low%, high%, key , index%)2、二分法查找(折半法查找)、二分法查找(折半法查找)要查找的数组必须有序必须有序。 思想:要查找的关键值Key同数组的中间mid项元素比较:12345678111222333444555666777888Lowhighmid444Key181四、四、 二分法求根二分法求根思想: 已知求根
127、区间a,b有一根,每次把求根区间缩小一半,直到找到解或求根区间足够小。方法:求a,b的中点c,判断 f(c)=0, c为求得的根,结束; f(a)与f(c)同号,则a,c无根,c代替a; 否则c,b无根,c代替b; 使求根区间缩小一半,重复上述步骤,直到区间小于精度。Public Function halfRoot(ByVal a!, ByVal b!) Dim c! Do While Abs(b - a) 0.00001 c = (a + b) / 2 If f(c) = 0 Then Exit Do ElseIf f(a) * f(c) 0 Then a = c Else b = c En
128、d If Loop halfRoot = cEnd Function182五、字符串处理五、字符串处理例 编写一个英文打字训练的程序,要求如下:(1)在标签框内随机产生30个字母的范文;(2)当焦点进入文本框时开始计时,并显示当时时间;(3)在键入文本框按产生的范文输入相应的字母;(4)当键入满了30个字母后结束计时,禁止向文本框输入内容 ,与范文逐一比较,显示打字的速度和正确率。1833.9 程序调试程序调试一一. .错误类型错误类型 (1 1)编辑错误编辑错误在编辑代码时,VB会对键入的代码直接进行语法检查。当发现代码存在打字错误,遗漏关键字或标点符等语法错误,VB在Form窗口中弹出一个
129、子窗口,提示出错信息,出错的那一行变成红色。这时,用户必须单击“确定”按钮,关闭出错提示窗,然后对出错行进行修改。184(2 2)编译错误)编译错误 编译错误指按了“启动”按钮,VB开始运行程序前,先编译执行的程序段时,产生的错误。此类错误由于用户未定义变量、遗漏关键字等原因产生。这时,Visual Basic也弹出一个子窗口,提示出错信息,出错的那一行被高亮度显示。185(3 3) 运行错误运行错误运行时错误指VB在编译通过后,运行代码时发生的错误。这类错误往往是指令代码执行了一非法操作引起的。例如类型不匹配、试图打开一个不存在的文件等。186(4 4) 逻辑错误逻辑错误程序运行后,得不到所
130、期望的结果,这说明程序存在逻辑错误。这类错误往往是程序存在逻辑上的缺陷所引起。例如,运算符使用不正确、语句的次序不对、循环语句的起始、终值不正确等。通常,逻辑错误不会产生错误提示信息,故错误较难排除,需要程序员仔细地阅读分析程序以及调试。187二二. .调试错误调试错误 (1)VB(1)VB的三种模式的三种模式 设计模式设计 进行程序的界面设计、属性设置、代码编写等。 运行模式运行 执行“运行/启动”命令,可以查看程序代码,但不能修改。 中断模式中断 当在运行模式,按了“中断”命令或当程序出现运行时错误时进入中断模式。可以查看代码、修改代码、检查数据。 (2)(2)调试窗口调试窗口 有三个调试
131、窗口,它们是:“立即”窗口、“监视”窗口、和“本地”窗口。可单击视图菜单中的对应命令打开这些窗口。188(3 3)设置断点和逐语句跟踪)设置断点和逐语句跟踪 断点是告诉VB挂起程序执行的一个标记,当程序执行到断点处即暂停程序的运行,进入中断模式。设置或删除断点的步骤: 中断模式下,直接查看某个变量的值,只要把鼠标指向所关心的变量处,稍停一下,就在鼠标下方显示该变量的值。断点标记当前行189第四章第四章 常用控件常用控件与窗体与窗体4 4.1 .1 选择性控件选择性控件4 4.2 .2 时时钟钟4 4.3 .3 菜菜单设计单设计4 4.4 .4 对对话框话框4 4.5 .5 多多重窗体重窗体4
132、4.6 .6 高高级控件级控件4 4.7 .7 鼠鼠标器、键盘标器、键盘一、单选钮和复选框一、单选钮和复选框1、属性:属性:Caption属性:属性:文本标题。Alignment属性属性:0:控件钮在左边,标题显示在右边。 1:控件钮在右边,标题显示在左边。Value属性属性:单选钮( (逻辑型逻辑型) ) 检查框(数值型)(数值型)True:选定 0-Unchecked:未被选定(默认)False:未选定(默认) 1-Checked:选定 2-Grayed:灰色,禁止选择Style属性属性: 0-Standard:标准方式 1-Graphical:图形方式4.1 选择性控件选择性控件复选框(
133、CheckBox) 单选钮(OptionButton) 列表框(ListBox) 组合框(ComboBox)191 2、事件:事件:Click单选和复选按钮都能接收Click事件,当单击时它们会自动改变状态。例例 用单选钮和复选框设置文本框的字体。192二、二、 框架框架(Frame):框架内控件的创建方法:框架内控件的创建方法:方法1:单击工具箱上的工具,然后用出现的“+”指针,在框架中适当位置拖拉出适当大小的控件。不能使用双击工具箱上图标的自动方式不能使用双击工具箱上图标的自动方式。方法2:将控件“剪切”到剪贴板,然后粘贴(Ctrl+V)到框架。 框架设Caption为 字体193 Cap
134、tion属性属性:框架标题 Enabled属性属性 False:标题呈灰色,不允许对框架内的对象进行操作。 Visible属性属性True:框架及其控件可见。False:框架及其控件被隐含起来。事件:事件:Click、DblClick一般不需要编写框架的事件过程。例例 框架用法示例194三、三、 列表框(列表框(ListBox):): 显示项目列表,用户可从中选择一个或多个项目。如果显示项目列表,用户可从中选择一个或多个项目。如果有较多的选择项,超出所画的区域而不能一次全部显示时,有较多的选择项,超出所画的区域而不能一次全部显示时,VB会自动加上滚动条。通常在一个列表框中只能选择一项,会自动加
135、上滚动条。通常在一个列表框中只能选择一项,但当列表框的但当列表框的MultiSelect属性为属性为1或或2时允许多项选择。时允许多项选择。列表列表框最主要的特点是只能从其中选择,而不能直接修改其中的内框最主要的特点是只能从其中选择,而不能直接修改其中的内容。容。List1列表框各主要属性的值: List1.ListIndex = 3 (下标从0开始的) List1. ListCount = 5 List1. Selected(3) = True,其余为False。 List1. Sorted = False,没有排序。 List1. Text 为 “cox” , 与List1. List(L
136、ist1. ListIndex)相等1951 1、 属性属性: :(1)基本属性:基本属性:Name、Enabled、Visible、Index等(2) List属性:属性:字符型数组,存放列表框的项目,下标是从0开始的。(3)ListIndex:表示执行时选中的列表项序号,如果未选定任何项时为-1。(4)ListCount:表示列表框中项目的数量,ListCount-1表示最后一项的序号。(5) Selected:是一个逻辑数组,其元素对应列表框中相应的项,表示对应的项在 程序运行期间是否被选中。Selected(i)的值为True表示第i+1项被选中。(6)Sorted:决定列表框中项目在
137、运行期间是否按字母顺序排列显示。 如为True:按字母顺序排列;如为False:按加入先后顺序排列。(7)Text:表示列表项中被选定的文本内容。是默认的属性。 注意:List1.List(List1.ListIndex) = List1.Text。(8) MultiSelect:0-None:禁止多项选择(默认)。1-Simple:简单多项选择。鼠标单击或按空格键表示选定或取消选定一个选择项。2-Extended:扩展多项选择。按住Ctrl键同时用鼠标单击或按空格键表示选定或取消选定一个选择项;按住Shift键同时单击,或按住Shift并且移动光标键,就可以从前一个选定的项扩展选择到当前选择
138、项,即选定多个连续项。其中其中:List 既既可在设计状态设置可在设计状态设置,也可也可在程序中设置或引用。在程序中设置或引用。 Sorted、MultiSelect 只能只能在设计状态设置。在设计状态设置。 ListIndex、ListCount、Selected、Text 只能在程序中设置或引用。只能在程序中设置或引用。1962 2、方法、方法 列表框中的选择项可以简单地在设计状态通过List属性设置,也可通过相应方法来实现。(1) AddItem:添加一个项目形式: 对象.AddItem item , index 其中:对象:可以是列表框或组合框 item:必须是字符串表达式,是要加入的
139、项目 index:决定新增项目在列表框或组合框中的位置,如果省略,则添加在最后。对于第一个项目,index为0。(2) RemoveItem:删除一个项目 形式: 对象.RemoveItem index 其中: 对象、index同上(3) Clear:清除所有项目 形式: 对象.Clear 其中: 对象可以是列表框、组合框或剪贴板。1973 3、事件:事件:Click、DblClick一般不需要编写Click事件过程通常在单击命令按钮或发生DblClick事件时才读取Text属性 例例1 对列表框进行项目添对列表框进行项目添 加、修改和删除操作。加、修改和删除操作。例例2 对列表框进行项目添对
140、列表框进行项目添 加操作加操作,并去掉重复值。并去掉重复值。198 Combo1组合框各主要属性的值: Combo1.ListIndex = 0 Combo1. ListCount = 8 Combo1. Sorted = False Combo1. Text 为 “李宁”四、组合框四、组合框(ComboBox): 组合框是组合了文本框和列表框的特性而形成的一种控件。 组合框在列表框中列出可供用户选择的选项,另外还有一个正文框。当用户选定某项后,该项内容自动装入文本框中。当列表框中没有所需选项时,除了下拉式列表框(Style为2)之外都允许在文本框中用键盘输入,但输入的内容不能自动添加到列表框
141、中。 组合框占用屏幕空间比列表框要小。 组合框有三种不同的风格,由Style属性值决定。199例例 对组合框进行项目添加、修改和删除操作。1 1、属性:、属性:组合框拥有列表框和文本框的大部分属性。组合框也有SelLength、SelStart、SelText这三个文本框才有的属性。组合框特有的属性:Style(列表框特有的属性:MultiSelect、Selected)类型类型Style输入输入下拉式组合框0(默认)能 简单组合框1能下拉式列表框2不能2 2、方法:、方法:同列表框3 3、事件:、事件:Click,只有简单组合框才有DblClick事件 2006.2 滚动条滚动条 1、重要属
142、性、重要属性Max:最大值 -32,76832,767Min:最小值 -32,76832,767SmallChange 最小变动值,单击箭头时移动的增量值。LargeChange 最大变动值,单击空白处时移动的增量值。Value 滑块所处位置所代表的值。水平滚动条垂直滚动条SmallChange Min Value Max SmallChangeLargeChange LargeChangeSlider控件Slider须通过:“工程/部件”,选择:Microsoft Windows common Control 6.0部件2012、事件:、事件:Scroll:拖动滑块时会触发Scroll事件。
143、Change:Value属性改变时触发Change事件。例例1 用一个文本框(txtSpeed)显示滚动条(hsbSpeed)滑块当前位置所代表的值。例例2 调色板程序。Sub hsbSpeed_Change() Text1.Text= HScroll1.Value End Sub202时钟控件能有规律地以一定的时间间隔激发计时器事件,周期性地自动执行相应的程序代码。它必须依附在窗体上,在程序运行时,它是不可见的。以Interval为时间间隔产生 Timer事件。属性:属性:Interval属性单位:ms(0.001s),介于064767之间,所以最大时间间隔大约1min。如:0.5秒是500
144、ms。 Interval0:屏蔽计时器。Enabled属性: True:有效计时 False:停止时钟工作事件:事件:只有Timer事件例例1 1 定时的闹钟:在文本框中设置定时时间,单击“定时”按钮开始定时。例例2 2 动态显示图片。4.2 时钟控件时钟控件(Timer)2034.3 菜单设计菜单设计一、菜单编辑器的使用一、菜单编辑器的使用 工具菜单编辑器工具菜单编辑器(CTRL+E)窗体上快捷菜单菜单编辑器窗体上快捷菜单菜单编辑器常用属性:常用属性:1. 标题标题(Caption) 热键:前面加热键:前面加&2. 名称名称(Name)文本框文本框 分隔符也应有名称。分隔符也应有名称。3.
145、快捷键快捷键(Shortcut) 菜单名没有快捷键菜单名没有快捷键4. 复选复选(Checked)检查框检查框 TRUE 有有 5. 有效有效(Enabled)检查框检查框6. 可见可见(Visible)检查框检查框菜单列表框菜单项属性 操作按钮每一个菜单项都是一个控件对象,只有每一个菜单项都是一个控件对象,只有Click事件。标题属性用事件。标题属性用于设置应用程序菜单上出现的字符,名称属性用于定义菜单项的控于设置应用程序菜单上出现的字符,名称属性用于定义菜单项的控件名,这个属性不会出现在屏幕上,在程序中用来引用该菜单。件名,这个属性不会出现在屏幕上,在程序中用来引用该菜单。204例例 建立
146、一个有菜单功能的文本编辑器。假定所要建立的菜单结构如建立一个有菜单功能的文本编辑器。假定所要建立的菜单结构如下所示。下所示。建立菜单大致可分成以下三个步骤:建立菜单大致可分成以下三个步骤:1、建立控件。、建立控件。2、设计菜单、设计菜单3、为事件过程编写代码。、为事件过程编写代码。标题名称 快捷键 标题名称 快捷键文件FileMenu.新建FileNew Ctrl+N.打开FileOpen Ctrl+O.- Bar1.保存 FileSave Ctrl+S.另存为 FileSaveAs.- Bar2.退出FileExit编辑EditMenu.复制EditCopy Ctrl+C.剪切 EditCu
147、t Ctrl+X.粘贴 EditPaste Ctrl+V 205二、二、 菜单项增减菜单项增减在程序运行时,菜单随时增减,如“文件”菜单能保留最近打开的文件数。这同控件数组一样,使用菜单数组。步骤:步骤: 1.在菜单设计时,加入一个菜单项,其Index为0(菜单数组), Visible为False。 2.在程序运行时,通过Load方法向菜单数组增加新的菜单项。 同样,要删除所建立的菜单项,使用UnLoad方法向菜单数组减少菜单项。 206例例 在文件菜单中保留最近打开的文件清单。在文件菜单中保留最近打开的文件清单。 在上例的基础上,在文件菜单的在上例的基础上,在文件菜单的“退出退出”选项前面选
148、项前面(或后面或后面)插插入一个菜单项入一个菜单项RunMenu,设置索引属性为设置索引属性为0,使,使RunMenu成为菜单成为菜单数组,数组,Visible属性设置为属性设置为False,再插入一个名为再插入一个名为Bar3的分隔线,的分隔线,Visible也设置为也设置为False。在菜单的最后加入名称为在菜单的最后加入名称为MenuDel,标题为标题为“删除菜单项删除菜单项”的菜单。的菜单。 假定要保留的文件清单限定为假定要保留的文件清单限定为4个文件名,设定一个全局变量个文件名,设定一个全局变量iMenucount记录文件打开的数量,当其小于记录文件打开的数量,当其小于5时,每打开一
149、个文件,时,每打开一个文件,就用就用Load方法向方法向RunMenu()数组加入动态菜单成员,并设置菜单项数组加入动态菜单成员,并设置菜单项标题为所打开的文件名,对于第标题为所打开的文件名,对于第5个以后打开的文件不再需要加入个以后打开的文件不再需要加入数组元素,采用先进先出的算法刷新记录最先使用的动态菜单成员数组元素,采用先进先出的算法刷新记录最先使用的动态菜单成员的标题。的标题。207三、三、 弹出菜单弹出菜单( (快捷菜单快捷菜单) ) 弹出菜单是独立于窗体菜单栏而显示在窗体内的浮动菜单。显示位置取决于单击鼠标键时指针的位置。设计与普通菜单相同(如果不希望菜单出现在窗口的顶部,该菜单名
150、Visible属性设置为False )。菜单弹出的方法: 对象对象.PopupMenu 菜单名菜单名, 标志标志, x, y 标志,表示弹出的位置和触发的键Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu EditMenu, vbPopupMenuCenterAlignEnd Sub例例 弹出菜单。在上例中加入有关“编辑”这部分菜单的弹出菜单功能,用鼠标右键单击Text1时能弹出EditMenu菜单中的菜单项,并以鼠标指针
151、坐标X为弹出菜单的中心,可使用如下代码:2084.44.4对话框对话框VB中有三种对话框:中有三种对话框:1、预定义的对话框:系统定义的。、预定义的对话框:系统定义的。 用用InputBox、MsgBox调用。调用。2、通用对话框:标准对话框。、通用对话框:标准对话框。有六种(打开、另存为、颜色、字体、打印和帮助)有六种(打开、另存为、颜色、字体、打印和帮助)调用方法:调用方法:“工程工程”“部件部件”Microsoft Common Dialog Control 6.03、用户自定义对话框:用户自定义对话框:用户自定义的含有控件的窗体。用户自定义的含有控件的窗体。209一、一、 通用对话框通
152、用对话框(CommonDialog)主要共同属性:主要共同属性: Action:打开通用对话框。打开通用对话框。DialogTiltle:通用对话框标题。通用对话框标题。CancelError:True:选择选择“取消取消”按钮,出现错误警告,自动将错误对象按钮,出现错误警告,自动将错误对象 Err.Number置为置为32755(cdlCancel)以便供程序判断。以便供程序判断。 False(缺省缺省):选择:选择“取消取消”按钮,没有错误警告。按钮,没有错误警告。打开通用对话框:打开通用对话框:在设计状态,在设计状态,CommonDialog控件以图标的形式显示在窗体上,控件以图标的形式
153、显示在窗体上,其大小不能改变,在运行时,控件本身被隐藏。要在程序中显示通其大小不能改变,在运行时,控件本身被隐藏。要在程序中显示通用对话框,必须对控件的用对话框,必须对控件的Action属性赋值,或者使用说明性的属性赋值,或者使用说明性的Show方法。方法。2101.“1.“文件文件”对话框(打开、保存)对话框(打开、保存)需设置的属性需设置的属性: :FilterFileNameInitDirFilterIndex=1211属性属性FileName:设置和得到用户所选的文件名(包含路径)FileTitle:不包含路径Filter:过滤文件类型,使文件列表框中只显示指定类型的文件。其格式为:文
154、件说明文件类型。例如, Documents(*.DOC)|*.DOC|Text Files(*.TXT)|*.txt|All Files|*.*FilterIndex:决定在文件类型列表框中显示第几组类型的文件。InitDir:初始化路径。若缺省,表示当前目录。“打开打开”文件对话框属性文件对话框属性页页DialogTiltleFileName InitDirFilterFilterIndexDefaultExt212例例1 1 用命令按钮的Click事件显示文件打开对话框 CommonDialog1.InitDir=“C:Windows” 设置初始目录CommonDialog1.Filter
155、 = 文本文件 | *.Txt 过滤文件类型 CommonDialog1.CancelError = True 控制取消按钮 CommonDialog1. ShowOpen 打开对话框 2. 2. “另存为另存为”对话框对话框 没有提供真正的存储文件操作,仍需要编程完成储存操作。属性属性 基本和“打开”对话框相同,另外还有一个 DefaultExt:所存文件的缺省扩展名3. 3. “颜色颜色”对话框对话框属性属性Color:返回或设置选定的颜色。例例2 2 “颜色”对话框的使用。在上例中增加一个命令按钮,用于打开“颜色”对话框,通过“颜色”对话框设置标签前景颜色。2134. “4. “字体字体
156、”对话框:对话框:在使用之前,必须设置在使用之前,必须设置FlagsFlags属性属性值值Flags属性:属性:指示所显示的字体类型,指示所显示的字体类型,必须设置必须设置。 cdlCFScreenFonts&H1屏幕字体屏幕字体 cdlCFPrinterFonts&H2打印机字体打印机字体 cdlCFBoth&H3打印机字体和屏幕字体。打印机字体和屏幕字体。 cdlCFEffects&H100显示删除线和下划线检查框以及颜色组合框显示删除线和下划线检查框以及颜色组合框FontUnderline FontName FontBold、FontItalic FontSizeFontStriketh
157、ru ColorMin、Max例例3 用“字体”对话框设置文本框的字体,要求字体对话框内出现删除线、下划线,并可控制颜色元素。2145. “5. “打印打印”对话框对话框属性属性FromPage:起始页号起始页号ToPage:终止页号终止页号Copies:打印份数打印份数如果打印驱动程序不支持多份打印,该属性有可能始终返回如果打印驱动程序不支持多份打印,该属性有可能始终返回 1。例例4 打印打印对话框的使用。可用对话框的使用。可用PrinterPrinter对象表示默认打印机对象表示默认打印机6. “6. “帮助帮助”对话框对话框帮助文件需要用其它的工具制作,如帮助文件需要用其它的工具制作,如
158、Microsoft Windows Help Compiler。 属性属性:HelpCommand:在线在线Help帮助类型帮助类型HelpFile:Help文件的路径及其名称文件的路径及其名称HelpKey:在帮助窗口显示由该帮助关键字指定的帮助信息。在帮助窗口显示由该帮助关键字指定的帮助信息。 例例5 帮助对话框的应用帮助对话框的应用215二、自定义对话框二、自定义对话框用户所创建的含有控件的窗体。用户所创建的含有控件的窗体。属性属性值值说明说明BorderStyle1边框类型为固定的单边框类型为固定的单个边框,防止对话框个边框,防止对话框在运行时改变尺寸在运行时改变尺寸ControlBo
159、xFalse取消控制菜单框取消控制菜单框MaxButtonFalse取消最大化按钮,防取消最大化按钮,防止对话框在运行时被止对话框在运行时被最大化最大化MinButtonFalse取消最小化按钮,防取消最小化按钮,防止对话框在运行时被止对话框在运行时被最大化最大化对话框属性设置对话框属性设置216显示对话框显示对话框l模式对话框模式对话框 frmAbout.Show vbModal vbModal是值为是值为1的常数的常数l无模式对话框无模式对话框 frmAbout.Show 不带不带style参数参数卸载对话框卸载对话框 Unload frmAbout隐藏对话框隐藏对话框 frmAbout.
160、Hide2174.5 多重窗体多重窗体1.添加窗体添加窗体l “工程工程|添加窗体添加窗体”新建新建 现存现存添加添加“现存现存”窗体时要注意:窗体时要注意: 防止多个窗体的防止多个窗体的Name相同而不能添加;相同而不能添加; 添加的窗体实际是将其它工程中已有的窗体加入,多个添加的窗体实际是将其它工程中已有的窗体加入,多个 工程共享窗体;工程共享窗体; 通过通过“另存为另存为”命令以不同的窗体文件名保存,断开共享。命令以不同的窗体文件名保存,断开共享。2182. 2. 设置启动窗体设置启动窗体设置启动对象3. 3. 窗体语句窗体语句 (1)Load语句:装入窗体到内存但没有显示窗体 形式:
161、Load 窗体名称(2)Unload语句:从内存删除窗体 形式: Unload 窗体名称 Unload Me 关闭窗体自己“工程工程/属性属性” “启动对启动对象象”2194. 4. 窗体方法窗体方法(1)Show方法:方法:显示一个窗体,它兼有显示一个窗体,它兼有加载加载和和显示显示窗体两种功能。窗体两种功能。 窗体名称窗体名称.Show 模式模式 1 Modal(模式型模式型):用户无法将鼠标移到其他窗口,只有在关:用户无法将鼠标移到其他窗口,只有在关闭该窗体后才能对其它窗体进行操作。闭该窗体后才能对其它窗体进行操作。0 Modeless(非模式型非模式型):可以对其它窗体进行操作。:可以
162、对其它窗体进行操作。 “模式模式”的默认值为的默认值为0。 当窗体成为活动窗口时发生窗体的当窗体成为活动窗口时发生窗体的Activate 事件。事件。(2) Hide方法:方法:隐藏窗体,但并没有从内存中删除。隐藏窗体,但并没有从内存中删除。 窗体名称窗体名称. Hide 2205.5.不同窗体间数据的存取不同窗体间数据的存取 (1)存取控件的属性存取控件的属性 另一窗体名另一窗体名.控件名控件名.属性属性 (2)存取变量的值存取变量的值 另一窗体名另一窗体名.全局变量名全局变量名 为了方便起见,要在多个窗体中存取的变量一般为了方便起见,要在多个窗体中存取的变量一般应放在标准模块应放在标准模块
163、(.BAS)内声明。内声明。221例例 输入学生五门课程的成绩,计算总分及平均分并显示。输入学生五门课程的成绩,计算总分及平均分并显示。模块:模块:Public MATH As SinglePublic PHYSICS As SinglePublic CHEMISTRY As SinglePublic CHINESE As SinglePublic ENGLISH As Single2226.启动时的快速显示启动时的快速显示 使用快速显示窗体模板的方法:使用快速显示窗体模板的方法: “工程工程”添加窗体添加窗体”新建新建” ”展示屏幕展示屏幕”打开打开” 2234.6 高级控件高级控件l“工程
164、”部件” ActiveX控件 可插入对象ActiveX设计器ActiveX控件存放在Windows的SYSTEM目录中,具有OCX扩展名224lSSTab控件控件页框(具有多个选项卡)页框(具有多个选项卡) 在在Microsoft Tabbed Dialog Control 6.0部件中部件中lProgressBar控件控件进度条进度条 在在Microsoft Windows Common Control 6.0部件中部件中lSlider控件控件包含滑块和可选择性刻度标记的窗口包含滑块和可选择性刻度标记的窗口 属性:属性:tickfrequency决定控件上刻度的疏密。决定控件上刻度的疏密。
165、事件:事件:scroll和和change事件事件225lUpDown控件控件 位于位于Microsoft Windows Common Control-2 6.0部件中部件中l将将UpDown控件与其他控件关联的步骤是:控件与其他控件关联的步骤是: (1)打开打开UpDown控件的属性页控件的属性页 (2)在合作者选项中输入合作者控件的名称和选定合作者在合作者选项中输入合作者控件的名称和选定合作者 控件的属性控件的属性属性:属性:increment-控件的实际增减值控件的实际增减值事件:事件:downclick和和upclick事件事件226lAnimation控件显示无声的AVI视频 位于位
166、于Microsoft Windows Common Control-2 6.0部件中部件中 方法:方法: open play stop close 属性:属性: center autoplay2274.7鼠标器和键盘鼠标器和键盘一、鼠标器:一、鼠标器:1. 1. 鼠标器事件:除了鼠标器事件:除了ClickClick、DblClickDblClick外,还有三个:外,还有三个:Sub Sub FormForm_MouseDown(Button_MouseDown(Button As Integer, Shift As Integer, As Integer, Shift As Integer,X
167、 As Single, Y As Single)X As Single, Y As Single)Sub Sub FormForm_MouseUp(Button_MouseUp(Button As Integer, Shift As Integer, As Integer, Shift As Integer,X As Single, Y As Single)X As Single, Y As Single)Sub Sub FormForm_MouseMove(Button_MouseMove(Button As Integer, Shift As Integer, As Integer, Sh
168、ift As Integer,X As Single, Y As Single)X As Single, Y As Single) 注意:注意: 鼠标事件发生在什么对象上,是窗体上还是控件上。当鼠标鼠标事件发生在什么对象上,是窗体上还是控件上。当鼠标指针位于窗体中没有控件的区域时,窗体将识别鼠标事件。当鼠指针位于窗体中没有控件的区域时,窗体将识别鼠标事件。当鼠标指针位于某个控件上方时,该控件将识别鼠标事件。标指针位于某个控件上方时,该控件将识别鼠标事件。228(1) Button(1) Button参数:指示按下或释放了哪个鼠标按钮。参数:指示按下或释放了哪个鼠标按钮。B2B1B0B0为为1:
169、按下了左键:按下了左键B1为为1:按下了右键:按下了右键B2为为1:按下了中键:按下了中键If Button = 1 Then 或者或者 If Button = vbLeftButton Then 这是按了左健后执行的代码这是按了左健后执行的代码 End if 使用符号常数:使用符号常数:1vbLeftButton:用户按下左键触发了鼠标事件;用户按下左键触发了鼠标事件;2vbRightButton:用户按下右键触发了鼠标事件;用户按下右键触发了鼠标事件;4vbMiddleButton:用户按下中键触发了鼠标事件。:用户按下中键触发了鼠标事件。中 右 左229(2) Shift(2) Shif
170、t参数:包含了参数:包含了ShiftShift、CtrlCtrl、AltAlt键的状态信息。键的状态信息。B0为为1:按下了:按下了Shift键键B1为为1:按下了:按下了Ctrl键键B2为为1:按下了:按下了Alt键键 例如:如果同时按了例如:如果同时按了Ctrl和和Shift键,则键,则B0和和B1为为1,B2为为0,Shift参参数为数为3(011B)注意:注意: 可能同时按下两个或三个键。如果可能同时按下两个或三个键。如果Shift1成立,并不表示没有按下成立,并不表示没有按下Shift,因为可能其它键也被按下了。如果要测试按下了某个键,则需要与因为可能其它键也被按下了。如果要测试按下
171、了某个键,则需要与Shift参数进参数进行行and运算。例如运算。例如Shift and 1成立,表示肯定按下了成立,表示肯定按下了Shift(可能其它键也被按下可能其它键也被按下了)。了)。 If Shift = 2 and Button = 1 Then 这是这是仅仅按住按住Ctrl键单击鼠标后执行的代码键单击鼠标后执行的代码 End If B2B1B0AltCtrlShift230符号常数:符号常数: 1vbShiftMask 2vbCtrlMask 4vbAltMask (3) x,y:鼠标的当前位置,采用的坐标系是用鼠标的当前位置,采用的坐标系是用ScaleMode属性属性指定的坐标
172、系指定的坐标系例例 显示鼠标器指针所指的位置例例 简单的画图程序。在窗体上按下鼠标右键画圆,按下鼠标左键移动时画线。231 二、二、 键盘事件键盘事件: :注意窗体和控件的键盘事件是有区别的。 KeyPress事件过程:事件过程:按下并释放一个会产生ASCII码的键时被触发Sub Form_KeyPress(KeyAscii As Integer)窗体的事件过程Sub object_KeyPress(index As Integer,KeyAscii As Integer)控件的事件过程 KeyDown事件过程:事件过程:按下键盘上任意一个键时被触发Sub Form_KeyDown(keyco
173、de As Integer, shift As Integer)Sub object_KeyDown(index As Integer,keycode As Integer, shift As Integer) KeyUp事件过程:事件过程:释放键盘上任意一个键时被触发Sub Form_KeyUp(keycode As Integer, shift As Integer)Sub object_KeyUp(index As Integer,keycode As Integer, shift As Integer)2321、KeyPress事件:事件: KeyPress事件只对会产生事件只对会产生
174、ASCII码的按键有反应,包括数字、大小写字母、码的按键有反应,包括数字、大小写字母、空格、空格、Enter、Tab、BackSpace、Esc及标点符号等键。对于例如方向键、功能键及标点符号等键。对于例如方向键、功能键(如(如F1,Alt,Shift,Ctrl)等的不会产生等的不会产生ASCII码的码的按键,按键,KeyPress不会发生。不会发生。2、KeyDown和和KeyUp事件:事件: 当控制焦点在某个对象上,同时用户按下键盘上的任意一个键,都会引发该当控制焦点在某个对象上,同时用户按下键盘上的任意一个键,都会引发该对象的对象的KeyDown事件,释放按键便触发事件,释放按键便触发K
175、eyUp事件。事件。KeyCode参数值是用户所操作的那个键的扫描代码,它告诉事件过程用户所参数值是用户所操作的那个键的扫描代码,它告诉事件过程用户所操作的物理键。例如,不管键盘处于小写还是大写状态,用户在键盘按操作的物理键。例如,不管键盘处于小写还是大写状态,用户在键盘按“A”键,键,KeyCode参数值相同。对于有上档字符和下档字符的键,其参数值相同。对于有上档字符和下档字符的键,其KeyCode也是相同的,也是相同的,为下档字符的为下档字符的ASCII码。码。键(字符)键(字符)KeyCodeKeyAscii“A”&H41&H41“a”&H41&H61“5”&H35&H35“%”&H35
176、&H25“1” (大键盘上大键盘上)H31&H31“1” (数字键盘上数字键盘上)&H61&H31233注意窗体和控件的键盘事件发生的顺序:注意窗体和控件的键盘事件发生的顺序: 默认情况下,当用户对当前具有控制焦点的控件进行键盘操作时,控件的三个键盘事件被触发,但窗体的三个键盘事件不会发生。为了启用这三个事件,必须将窗体的KeyPreview属性设为True,而默认值为False。 如果窗体的如果窗体的KeyPreview属性设置为属性设置为True,则首先触发窗则首先触发窗体的体的KeyPress、KeyUp、KeyDown事件,然后才触发控件的事件,然后才触发控件的键盘事件。键盘事件。也就
177、是说,如果窗体的也就是说,如果窗体的KeyPreview属性设为属性设为True,并且窗体级事件过程修改了并且窗体级事件过程修改了KeyAscii变量的值,则当前具有变量的值,则当前具有焦点的控件的焦点的控件的KeyPress事件过程将接收到修改后的值,事件过程将接收到修改后的值,如果窗如果窗体级事件过程将体级事件过程将KeyAscii设置为设置为0,则不再调用对象的,则不再调用对象的KeyPress事件过程。事件过程。234窗体的:KeyPressKeyDownKeyUp 控件的:KeyPressKeyDownKeyUp 窗体的KeyPreview为True焦点在控件上输入Sub Form_
178、KeyPress(KeyAscii As Integer) KeyAscii = KeyAscii + 1End SubSub Text1_KeyPress(KeyAscii As Integer) KeyAscii = KeyAscii + 1End Sub假定窗体KeyPreview为True,并有下面事件过程,则当文本框中输入“1”时,实际上是得到的是“3”?窗体KeyPreview为False时 在文本框中输入“1”时,实际上得到的是什么。在这里作一点修改在这里作一点修改影响所有控件影响所有控件在这里作一点修改在这里作一点修改影响一个控件影响一个控件235利用这个特性可以对输入的数据进
179、行验证、限制和修改利用这个特性可以对输入的数据进行验证、限制和修改1. 修改输入数据:将KeyPreview设置为True时,在窗体的如下KeyPress事件过程中将所有的字符都改成大写,则窗体上的所有控件接收到的都是大写字符。 Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = Asc(a) And KeyAscii = Asc(z) ThenKeyAscii = KeyAscii + Asc(A) - Asc(a) End IfEnd Sub 2. 限制数据输入:文本框只能接收“0”“9”的数字字符。Sub Text1_KeyPress
180、(KeyAscii As Integer) If KeyAscii 57 ThenKeyAscii = 0 End IfEnd Sub236 例例 编写一个程序,当按下编写一个程序,当按下Alt+F5时终止程序的运行。时终止程序的运行。(F5的的KeyCode码为码为vbKeyF5)先把窗体的先把窗体的KeyPreview设置为设置为True,再编写如下的程序:再编写如下的程序:Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) 按下按下Alt键时键时,Shift的值为的值为4 If (KeyCode = vbKeyF5) And (S
181、hift = 4) Then End End IfEnd Sub237三、拖放三、拖放: :即将源对象即将源对象“拖拖”到目标对象上到目标对象上“放放”的操作。的操作。有两种模式:有两种模式:自动拖放手工拖放2381. DragMode属性属性 1:自动拖动模式 ,源对象不再接收Click和MouseDown事件。 0:(缺省),手工拖动模式,源对象接收Click和MouseDown事件2. DragIcon属性属性拖动过程中显示的图标(Ico或Cur文件)。 lblExample1.DragIcon=LoadPicture (C:IconsMail.ico) lblExample2.Drag
182、Icon=picIcon.Picture 用控件picIcon中的图形作为标签lblExample2被拖动时显示的图标3. Drag方法方法 当DragMode为0时,需用Drag方法启动拖放 控件名称.Drag 参数 0:取消拖放操作 1(省略):开始拖放操作 2:结束拖放操作 2394、拖放事件:、拖放事件:DragDrop、DragOver 在这两种事件引发的同时,系统自动将源对象作为Source参数传递给事件过程,可通过程序设计对源对象进行一些操作和判断,同时鼠标指针的位置及拖放过程的状态也将作为参数传递给事件过程,供程序识别和使用。在拖放事件过程中可以采用TypeOf函数判断源对象的
183、控件类型,供程序识别。通过判断源对象的控件类型,可对其进行属性设置和调用相应的方法进行操作。其形式如下:If TypeOf对象变量 Is 控件类型then 其中TypeOf函数的返回值为对象变量所引用控件的类型例:例:If TypeOftext1 is textbox then msgbox(“text”) end if2405.Parent属性 所有控件均具有该属性。所有控件均具有该属性。 当控件作为数据传递给过程时,控件所在窗体当控件作为数据传递给过程时,控件所在窗体也被传递到过程中,窗体的属性及方法可通过也被传递到过程中,窗体的属性及方法可通过source.parent继承下来。继承下来
184、。 如:如:source.parent.属性属性=设置值设置值 source.parent.方法参数方法参数241例例 拖放应用示例:将装有某个图形的图形框作为源对象拖放到窗体的某个地方,如果被拖到“取消拖放”标签上方,则取消拖放操作。 例例 拖放应用示例:左边图像框采用手工拖动模式,标签采用自动拖动模式。图像框只能用鼠标左键拖动,拖到右边的图像框后消失,而且拖动时图像框中的图标作为拖动图标使用。标签可以拖动,但拖到图像框后显示“Error”。2424.7.4 OLE拖放拖放l将数据从一个控件或应用程序中移动到另一个控件或将数据从一个控件或应用程序中移动到另一个控件或应用程序中应用程序中lOL
185、EDragMode属性属性 0manual 手动实现手动实现“拖拖”操作操作 1automatic 自动实现自动实现“拖拖”操作操作lOLEDropMode属性属性 0none 不接受不接受“放放”操作操作 1manual 手动实现手动实现“放放”操作操作 2automatic 自动实现自动实现“放放”操作操作243l例:將文本框的OLEDragMode属性设为属性设为1, OLEDropMode属性设为属性设为2,把文本框中的内容拖,把文本框中的内容拖动到动到word等应用程序中等应用程序中244第五章第五章 文件文件5.1 5.1 文件系统控件文件系统控件5.25.2 文件的读写文件的读写
186、5.1 文件系统控件文件系统控件Sub Drive1_Change() Dir1.Path =Drive1.DriveEnd SubSub Dir1_Change() File1.Path = Dir1.PathEnd SubPrivate Sub Form_Load() Combo1.AddItem *.txt Combo1.AddItem *.dat Combo1.AddItem *.jpg;*.wmf;*.gif Combo1.AddItem *.* Combo1.Text = *.txt File1.Pattern = *.txtEnd SubPrivate Sub Combo1_Cl
187、ick() File1.Pattern = Combo1.TextEnd SubSub Private Sub File1_Click() MsgBox File1.FileNameEnd SubPrivate Sub File1_DblClick() ChDir Dir1.Path x = Shell(File1.FileName, 1)End Sub文件系统控件有三种,即驱动器、目录和文件列表框驱动器、目录和文件列表框2461. 驱动器列表框驱动器列表框Drive属性属性: 对象.Drive = driveChange事件:事件: 重新设置Drive属性引发Change事件 2. 目录列表
188、框目录列表框Path属性属性 : 对象.Path = pathnameChange事件:事件: 重新设置Path 属性引发Change事件2473. 文件列表框文件列表框Path属性:属性: 显示该路径下的文件。 重新设置Path属性引发PathChange事件。Pattern属性:属性: 显示的文件类型。 对象.Pattern = value 重新设置Pattern属性引发PatternChange事件。 例如例如:File1.Pattern = *.frm,显示*.frm文件。 多个文件类型用分号;分界。例如: *.frm;*.frxFileName属性属性: 对象.FileName =
189、pathname 引用时只返回文件名,相当于File1.List(File1.ListIndex),需用Path属性得到其路径;设置时可带路径。248Click、DblClick事件:事件: 例如,单击输出文件名。Sub File1_Click( ) MsgBox File1.FileNameEnd Sub 例如,双击执行可执行程序Sub File1_DblClick( ) ChDir Dir1.Path 改变当前目录 RetVal = Shell(File1.FileName, 1) 执行程序End Sub249文件:存储在外部介质上数据的集合。按名存取。文件:存储在外部介质上数据的集合。按
190、名存取。1. 记录记录由若干个相互关联的数据项组成。由若干个相互关联的数据项组成。例如,由学生的学习成绩信息组成的记录:例如,由学生的学习成绩信息组成的记录:数据项2. 文件及其种类文件及其种类文件:是记录的集合文件:是记录的集合顺序访问模式:顺序文件顺序访问模式:顺序文件。随机访问模式:随机文件,随机访问模式:随机文件,记录的长度相同记录的长度相同二进制访问模式:二进制文件(可认为记录长度为二进制访问模式:二进制文件(可认为记录长度为1)5.2 文件的读写文件的读写250 (1) 顺序文件顺序文件按顺序依次把记录写入文件;按顺序依次把记录读出来。文本文件:一行一条记录,记录可长可短,以以“换
191、行换行”字符为分隔符号。字符为分隔符号。(2) 随机文件随机文件随机文件可以直接访问文件中的任意一个记录。每个记录的长度是固定的,每个记录都有一个记录号,每个记录的长度是固定的,每个记录都有一个记录号,按记录号进行存取。通常用来处理数据文件。按记录号进行存取。通常用来处理数据文件。根据记录号访问(3) 二进制文件二进制文件直接把二进制码存放在文件中。2511. 打开文件打开文件Open 文件名文件名 For 模式模式 As #文件号文件号 Len=记录长度记录长度 (1)文件名:字符串常量,包括存储文件的驱动器名及路径(2) 模式OUTPUT:写操作写操作(从内存写入文件从内存写入文件)INP
192、UT:读操作读操作(从文件读出到内存从文件读出到内存)APPEND:追加信息到文件未尾追加信息到文件未尾(3) 文件号1511,可以用FreeFile函数获得下一个可利用的文件号。(4) 记录长度小于或等于32767的整数,它指定数据缓冲区的大小。例如例如,打开C:VBSCORE,供写入数据,指定文件号为#1。OPEN C:VBSCORE FOR OUTPUT AS #15.2.2 顺序访问模式顺序访问模式打开文件读出或写入关闭文件2522. 写入命令:有写入命令:有Write # 或或Print # 命令命令(1)Print #文件号,文件号,输出列表输出列表“输出列表输出列表”:是指:是指
193、Spc(n)|Tab(n)表达式列表表达式列表;|,(同(同Print方法的含方法的含义)义)例:保存文本框例:保存文本框假定文本框的名称为Text1,文件名为TEST.DAT。方法方法1:把整个文本框的内容一次性地写入一次性地写入文件。Open TEST.DAT For Output As #1Print #1, Text1.textClose #1方法方法2:把整个文本框的内容一个字符一个字符地写入一个字符一个字符地写入文件。Open TEST.DAT For Output As #1For i=1 To len(Text1.text) Print #1,Mid(Text1, i, 1);
194、Next iClose #1253 (2)Write #文件号,文件号,输出列表输出列表“输出列表”:一般是指用“,”分隔的数值或字符串表达式。Write#的功能基本上与Print#语句相同,区别在于Write#是以紧凑格式存放,即在数据项之间插入“,”,并给字符串加上双引号。例如,命令:Write #1,One,Two,123内容:“One”,“Two”,123 (包括标点符号)3. 关闭文件关闭文件Close #文件号, #文件号.例如,Close #1, #2, #3 如果省略了文件号,Close命令将会关闭所有已经打开的文件。2544. 读顺序文件读顺序文件(1)INPUT #文件号文
195、件号, 变量列表变量列表-按数据项读按数据项读从文件中读出数据,把读出的每个数据项分别存放到所对应的变从文件中读出数据,把读出的每个数据项分别存放到所对应的变量。为了能够用量。为了能够用Input#将文件中的数据正确地读出,将文件中的数据正确地读出,在将数据写在将数据写入文件时,要使用入文件时,要使用Write#语句而不是用语句而不是用Print#语句语句。(2)LINE INPUT #文件号文件号,字符串变量字符串变量-按行读按行读读一行到变量中,主要用来读取文本文件。读出的数据中不包含读一行到变量中,主要用来读取文本文件。读出的数据中不包含回车符及换行符。回车符及换行符。(3)INPUT$
196、(读取字符数读取字符数,#文件号文件号)-一次性读入一次性读入该函数可以读取指定数目的字符。该函数可以读取指定数目的字符。2555. 函数函数LOF(文件号文件号):返回文件的长度(总字节数)。如LOF(1)返回#1文件的长度,如果返回0值,则表示该文件是一个空文件。EOF(文件号文件号):返回读写位置。指针在文件尾时,EOF函数为True,否则为False。 对于顺序文件用EOF函数测试是否到文件尾; 对于随机文件和二进制文件,当最近一个执行的Get语 句无法读到一个完整记录时返回True,否则返回False。256例:读文本文件到文本框例:读文本文件到文本框假定文本框名称为Text1,文件
197、名为MYFILE.TXT。方法方法1:一行一行读一行一行读Text1.Text Open MYFILE.TXT For Input As #1Do While Not EOF(1)Line Input #1, InputDataText1.Text Text1.Text + InputData+vbCrLfLoopClose #1257方法方法2:一次性读一次性读Text1.Text Open MYFILE.TXT For Input As #1Text1.Text = Input$( LOF(1), 1)Close #1 方法方法3:一个个字符读一个个字符读Dim InputData as
198、String*1Text1.Text Open MYFILE.TXT For Input As #1Do While Not EOF(1)InputData= Input$(1,#1) Text1.Text Text1.Text + InputDataLoopClose #1 258例例文件加密程序Private Sub File1_DblClick()Open tfilename For Input As #1Text1.Text = Do While Not EOF(1) indata = Input(1, #1) Text1.Text = Text1.Text + indataLoopE
199、nd SubCommonDialog1.Action = 2Open CommonDialog1.FileName For Output As #1For i = 1 To Len(Text1.Text) Print #1, Mid(Text1.Text, i, 1);Next iClose #12595.4 随机文件随机文件1、 打开Open 文件名 For Random As #文件号 Len=记录长度记录长度 文件以随机访问模式打开后,可以同时进行写入与读出操作。记录长度缺省值是128个字节。2、 写操作Put #文件号,记录号,变量名将一个记录变量的内容写到指定的记录位置处。忽略记录号
200、,则表示在当前记录后的位置插入一条记录。3、 读操作Get #文件号,记录号,变量名 将记录号指定的记录内容读入记录变量中 忽略记录号,则读出当前记录后的那一条记录。 4、关闭文件 Close260例例 学生信息管理程序。追加记录(Command1):将一个学生的信息作为一条记录添加到随机文件末尾。显示记录(cmdDisplay):显示文本框(text4)中指定的记录。2615.5 常用的文件操作语句和函数常用的文件操作语句和函数1. FileCopy语句语句格式:FileCopy source , destination 功能:复制一个文件。 说明: FileCopy语句不能复制一个已打开的
201、文件。2. Kill语句语句 格式:Kill pathname 功能:删除文件。 说明:pathname中可以使用统配符“*”和“?”。 例如:Kill *.TXT3. Name 语句语句 格式:Name oldpathname As newpathname 功能:重新命名一个文件或目录。 说明:(1) Name具有移动文件的功能。 (2) 不能使用统配符“*”和“?”,不能对一个已打开的文件上使用Name语句。2624. ChDrive 语句语句格式:ChDrive drive功能:改变当前驱动器。 说明:如果drive为“”,则当前驱动器将不会改变;如果drive中有多个字 符,则ChDr
202、ive只会使用首字母。5. MkDir 语句语句格式:MkDir path功能:创建一个新的目录。6. ChDir 语句语句格式:ChDir path功能:改变当前目录。例如:ChDir D:TMP 7. RmDir 语句语句格式:RmDir path功能:删除一个存在的目录。 说明:只能删除空目录。2638. CurDir函数函数格式格式:CurDir(drive)功能:利用功能:利用CurDir函数可以确定任何一个驱动器的当前目录。函数可以确定任何一个驱动器的当前目录。 说明:说明: drive为为“”,则,则CurDir返回当前驱动器的当前目录。返回当前驱动器的当前目录。例例 利用利用C
203、hDrive和和ChDir语句改写语句改写File1_DblClick()事件过程。事件过程。Sub File1_DblClick()ChDrive Drive1.Drive 设置缺省驱动器设置缺省驱动器ChDir File1.Path 设置缺省目录设置缺省目录RetVal = Shell(File1.FileName, 1)End Sub264例例 添加事件过程添加事件过程File1_MouseDown(),使之支持使之支持Del键,即键,即按下按下Del键删除选定的文件。键删除选定的文件。Sub File1_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = vbKeyDelete ThenChDrive Drive1.DriveChDir File1.PathKill File1.FileNameFile1.Refresh 文件删除后更新文件列表框文件删除后更新文件列表框End IfEnd Sub265