Visual Basic 程序设计甘肃农业大学信息科学技术学院
Visual Basic 程序设计第 1章 Visual Basic 程序设计概述第 2章 简单程序设计第 3章 语言基础第 4章 程序的基本控制结构第 5章 数组和自定义类型第 6章 通用过程第 7章 常用控件第 8章 界面设计第 9章 图形操作第 10章 数据文件第 1章 Visual Basic 程序设计概述
1.1 Visual Basic简介
1.2 Visual Basic启动和退出
1.3 Visual Basic集成开发环境
1.4 程序运行和调试
1.5 Visual Basic帮助系统
1.1 Visual Basic简介
1.1.1 Visual Basic的发展
1.1.2 Visual Basic的功能特点
1.1.3 Visual Basic的版本返回本章
1.1.1 Visual Basic的发展
Visual Basic是美国 Microsoft公司 1991年推出的在 Basic语言基础上发展起来的的基于 Windows 平台的应用开发软件。
Basic语言 是 20世纪 60年代的计算机程序设计语言。
,Visual”是指开发图形用户界面( Graphical User
Interfaces,GUI)时将要建立的对象直接添加到界面的编程方法。
本书以 Visual Basic 6.0企业版 为例进行讲解。
返回本节
1.1.2 Visual Basic的功能特点
1.支持面向对象的可视化设计工具;
2.使用事件驱动的编程方式;
3.采用结构化的程序设计语言的特点;
4.具有易学易用的应用程序集成开发环境;
5.支持多种数据库系统的访问;
6.强大的网络和多媒体功能。
返回本节
1.1.3 Visual Basic的的版本
Visual Basic 6.0具有以下三种版本:
1.学习版是 Visual Basic的 基础版本,适用于普通学习者及开发人员。
2.专业版除 包括学习版的所有工具 之外,还增加了 ActiveX 等控件,
适用于计算机专业开发人员。
3.企业版除 包括专业版全部工具 之外,还增加了数据库管理工具等工具,可供专业人员开发功能强大的组内分布式应用程序。
返回本节
1.2 Visual Basic启动和退出
1.2.1 Visual Basic的启动
1.2.2 Visual Basic的退出返回本章
1.2.1 Visual Basic的启动启动 Visual Basic的常用方法:
方法 1,首先选择 Windows“开始”菜单中的“程序”菜单项,
然后选择,Microsoft Visual Basic 6.0中文版”子菜单中,Microsoft Visual Basic 6.0中文版”菜单项;
方法 2,在“我的电脑”下找到安装有 VB6.exe文件的文件夹,
鼠标双击该文件图标。
启动 Visual Basic后,先会打开“新建工程”窗口,如图 1.1所示。
该窗口列出能够在 Visual Basic中建立的所有 工程(应用程序)类型 。
图 1.1,新建工程”窗口用户可以根据需要选择一个工程图标,然后单击 打开按钮 或双击 该工程图标,进入 Visual
Basic的集成开发环境。
在“新建工程”窗口 包含三个选项卡:
“新建”,列出可以建立的工程类型,
默认选项是,标准 EXE” 。
“现存”,可打开 已存在的所有工程 。
“最新”,在该选项卡中列出 最近建立或使用过的工程 。
1.2.2 Visual Basic的退出退出 Visual Basic的常用方法:
方法 1,选择 Visual Basic“文件”菜单中的“退出”菜单项。
方法 2,单击 Visual Basic主窗体的右上角的“关闭”按钮。
方法 3,选择控制菜单中的“退出”菜单项。
返回本节
1.3 Visual Basic集成开发环境
1.3.1 标题栏
1.3.2 菜单栏
1.3.3 工具栏
1.3.4 工具箱
1.3.5,窗体设计”窗口
1.3.6,代码编辑”窗口
1.3.7 工程资源管理器窗口
1.3.8,属性”窗口
1.3.9 窗体布局窗口
1.3.10其他窗口
Visual Basic把支持程序开发的一组软件工具都放在一个公共的环境中,称为
“集成开发环境”,如图 1.2所示。
立即窗口标题栏菜单栏工具栏工具箱窗体设计窗口代码编辑窗口工程资源管理器属性窗口窗体布局窗口图 1.2 集成开发环境返回本章
1.3.1标题栏
Visual Basic启动后,标题栏中标题显示,工程 1-Visual
Basic[设计 ]”。,设计”表示当前工作模式是处于 设计模式 。
Visual Basic共有三种工作模式:
( 1)设计模式:在此该模式中可以 设计界面和编写代码 。
( 2)运行模式:在该模式中可以 运行应用程序,但不可编辑界面和编写代码。
( 3)中断模式:在该模式中应用程序运行暂时中断,可以 编写修改代码但不能编辑界面 。按 F5键可以继续运行程序 。
返回本节
1.3.2菜单栏
Visual Basic 的菜单栏由“文件”和“编辑” 等 13个下拉式菜单组成,提供了 Visual Basic编程需要的所有菜单项。其功能如表 1.1所示。 表 1.1 菜单及其功能菜单名 功能描述文件 用于创建、打开、保存、显示最近的工程和生成可执行文件等编辑 用于编辑程序源代码,其中菜单项包括了各种编辑软件所具有的通用功能视图 用于查看程序源代码和控件,显示或隐藏所有窗口工程 用于添加或处理控件、模块和窗体等对象格式 用于设置窗体上控件的对齐等格式调试 用于对程序进行调试和查错运行 用于启动程序、设置中断和终止程序运行查询 在设计数据库应用程序时可以设计 SQL属性图表 在设计数据库应用程序时可以编辑数据库工具 用于为工程添加过程、函数和菜单,设置环境参数,实现集成开发环境下的工具扩展外接程序 为工程删除或添加外部程序窗口 为屏幕窗口设置平铺等不同布局帮助 为用户提供全面、正确使用 Visual Basic的方法,帮助用户学习返回本节
1.3.3工具栏工具栏是由一组按钮形式的常用菜单项构成 。
Visual Basic提供标准工具栏、编辑工具栏、窗体编辑器工具栏和调试工具栏,并允许用户自定义的工具栏。
Visual Basic启动后,默认显示标准工具栏,如图 1.3所示。
工程资源管理器添加标准工程添加窗体菜单编辑器打开工程保存工程剪切复制粘贴查找撤销键入重复启动中断结束属性窗口窗体布局窗口对象浏览器工具箱数据视图窗口控件管理器添加标准工程添加窗体菜单编辑器打开工程保存工程剪切复制粘贴查找撤销键入重复启动中断结束属性窗口窗体布局窗口对象浏览器组件管理器图 1.3 标准工具栏返回本节
1.3.4工具箱
Visual Basic启动后,工具箱由 21个按钮形式的工具组成 。
如图 1.3所示。利用这些工具,用户可以在窗体上创建所需的对象。用户还可以将其他工具添加到工具箱。
图 1.4 工具箱水平滚动条( HScrollBox)
目录列表框( DirListBox)
指针( Pointer)
标签( Label)
框架( Frame)
复选框( CheckBox)
组合框( ComboBox)
时钟( Timer)
图形( Shape)
图形框 ( PictureBox)
对象链接与嵌入( OLE)
图像框( Image)
文本框 ( TextBox)
命令按钮 ( CommandButton)
单选按钮 ( OptionButton)
列表框 ( ListBox)
垂直滚动条 ( ScrollBoxVScrollBar)
驱动器列表框 ( DriveListBox)
文件列表框 ( FileListBox)
直线 ( Line)
数据控制 ( Data)
返回本节
1.3.5“窗体设计”窗口
“窗体设计”窗口简称窗体,是进行 界面设计 的窗口。用户外观界面的创建在此窗口中进行;程序运行时,用户通过和窗体上的控件交互信息得到结果。
当每次创建一个新工程时,Visual Basic会建立一个新窗体。在 Visual Basic中,一个工程可以有多个窗体。
返回本节
1.3.6“代码编辑”窗口
“代码编辑”窗口,简称代码窗口。是 显示和编辑程序代码 的窗口。主要包括以下
5部分,如图 1.5所示。应用程序中的 每个 窗体或标准模块都对应 一个 独立的代码窗口。
打开代码窗口常用方法,
方法 1,双击窗体所在区域;
方法 2,在窗体上单击鼠标右键,在打开的弹出式菜单中选择,查看代码”菜单项;
方法 3,选择“视图”菜单中的“代码窗口”菜单项;
方法 4,选择“工程资源管理器”窗口中的“查看代码”按钮。
对象列表框 过程列表框代码区过程查看全模块查看 图 1.5 代码编辑窗口返回本节
1.3.7工程资源管理器窗口工程资源管理器简称工程窗口,是 Visual Basic提供给用户了解当前工程的窗口,如图 1.6所示。其中层次分明地列出组成当前工程的所有文件。
查看代码 切换文件夹查看对象图 1.6 工程资源管理器主要文件:
工程文件 (,vbp)
窗体文件 (,frm)
标准模块文件(,bas)
类模块文件 (.cls)
返回本节
1.3.8“属性”窗口属性窗口是 Visual Basic提供给 用户查看或修改对象的 属性 的窗口,如图 1.7所示 。
图 1.7 属性对话框属性说明对象列表框属性列表框选项卡属性名 属性值返回本节
1.3.9“窗体布局” 窗口用于设置在程序运行时窗体在屏幕中的初始位置。在设计模式下,可以通过在该窗口中拖动小窗体图标调整实现。
返回本节
1.3.10其它窗口在 Visual Basic集成开发环境中还包括其他窗口,例如:监视窗口等。这些窗口可以通过选择“视图”菜单中相应的菜单项显示。
返回本节
1.4 程序运行和调试
1.4.1程序运行
1.4.2 程序调试
1.4.3调试和排错方法返回本章
1.4.1 程序运行在 Visual Basic中,程序的运行有 两种 方式。
1,编译方式这种方式可以通过选择“文件”菜单中的,生成 ….exe,菜单项实现。这样生成的可执行文件可以脱离 Visual Basic集成开发环境多次运行。
2,解释方式这种方式可以通过选择“运行”菜单中的,启动,菜单项实现。
程序在 Visual Basic集成开发环境中直接执行。
返回本节
1.4.2 程序调试逻辑错误程序中的错误编译时错误运行期错误编辑时错误语法错误常见错误,例如,输入语句,x=x-
缺少,表达式
(语法错误 )
返回本节
1.4.3 调试和排错方法
1.插入断点和逐语句跟踪用户可选定代码窗口中怀疑出错的语句将其设置为断点,在程序执行到断点处,通过鼠标查看断点前的变量、属性或表达式的值 。
还可以选择“调试”菜单中的“逐语句”菜单项,如图 1.11所示。
建议,初学者可采用插入断点 +逐语句 的方法调试程序。
查看变量
y的值设置的断点逐语句跟踪图 1.11插入断点和逐语句跟踪
2,调试窗口在中断模式下,用户还可以通过立即窗口、本地窗口和监视窗口查看变量的值,如图 1.12、图 1.13和图 1.14所示 。
图 1.12 立即窗口图 1.13 本地窗口图 1.14 监视窗口返回本节
1.5 Visual Basic帮助系统
Visual Basic的帮助系统 MSDN( Microsoft Developer
Network),主要包括示例代码、开发人员知识库和 Visual
Studio文档等。
用户可以通过选择“帮助”菜单中的“内容”菜单项、
“索引”菜单项、“搜索”菜单项或按 F1键,打开 MSDN窗口。
MSDN必须单独安装后放可使用。
返回本章第 2章 简单程序设计
2.1 面向对象的基本概念
2.2 创建 Visual Basic应用程序的一般方法
2.3 窗体和常用控件
2.1 面向对象的基本概念
2.1.1 类与对象
2.1.2 对象的创建及操作
2.1.3 属性
2.1.4 事件、事件过程和事件驱动
2.1.5 方法返回本章
2.1.1 类与对象类是同类对象的抽象,对象是类的一个实例。
1,对象对象是现实世界中存在的客观事物,是对客观事物的属性和行为的描述。
例如:一台个人计算机是一个对象,它的 CPU型号、内存大小、硬盘大小和显示器的型号等都属于它的 属性 。而播放视频等对他进行的操作属于它的 行为 。
2,类类是同类对象的抽象描述。
返回本节
2.1.2 对象的创建及操作
1,创建对象方法 1,在“工具箱”中选中要创建的控件,然后按住鼠标左键在窗体上拖拽鼠标,松开鼠标即可建立用户自定义大小的一个控件。
方法 2,在“工具箱”中双击要创建的对象,即可创建一个系统默认大小的控件。
方法 3,在创建多个同类控件时可采用此方法。创建第一个控件后,使用“复制”,“粘贴”命令创建其余的控件 。
2,编辑对象编辑对象的主要操作有:删除、复制、放大缩小和调整对齐方式等。
3,对象的命名每个对象都有自己的对象名,当创建了一个对象后,Visual
Basic系统会自动给对象命名。
对象可以通过在“属性”窗口中修改对象的名称属性,这样可以更好地描述对象的类型及功能。
例如,第一个创建的命令按钮,系统自动命名为 Command1,
在“属性”窗口中可以修改 Name属性为 CMD1
返回本节
2.1.3 属性对象可以通过属性值的修改来改变自己的状态、外观甚至是行为。修改对象的属性值可以在“属性”窗口进行设置,也可以在程序中通过编写代码完成。
1,在“属性”窗口进行属性设置
( 1)在集成开发环境中打开属性窗口,然后选中需要修改属性的对象;
( 2)在“属性”窗口中选中要修改的属性进行设置。在进行属性设置时可以直接设置。
2,通过代码进行属性设置有时根据解决问题的需要,有些属性设置或修改需要在程序中通过编写代码实现。其使用格式如下:
[对象名,]属性名 = <属性值 >
例如,Command1.Caption="确定 "
返回本节
2.1.4 事件、事件过程和事件驱动
1,事件事件是指外界施加在对象上的动作。
2,事件处理不同的对象可以承受的事件也不尽相同。当一个对象承受某一动作,进行相应的处理 。
3,事件过程为处理某一事件而编写的代码体现为一个过程形式,称为事件过程 。
4,事件驱动对于 Visual Basic应用程序,编写事件过程代码后,程序运行时,先做什么后做什么是由外界触发事件的先后顺序来决定的,这就是事件驱动机制。
例如:在窗体上创建了两个命令按钮。单击“显示”命令按钮可以在窗体上输出“你好!”;单击“颜色”命令按钮可以改变窗体颜色,那么程序运行后是先改变窗体颜色还是先在窗体上输出“你好!”是由单击“显示”和“颜色”
命令按钮的先后顺序来决定的,这就是事件驱动机制。
返回本节
2.1.5 方法方法是对象主动发出的动作,用于实现特定的功能。一个对象可以具有多个方法。其使用格式如下:
[对象名,]方法名 [参数列表 ]
例如:要在窗体上输出“你好!”,可使用 Printer方法,代码为
Form1,Print,你好!”
返回本节
2.2 创建 Visual Basic应用程序的一般方法创建和设计一个 Visual Basic应用程序的步骤如下:
( 1)打开 Visual Basic集成开发环境,新建一个工程;
( 2)创建对象,设置对象的属性(设计界面);
( 3)编写代码(根据需要编写事件、方法过程的代码);
( 4)运行和测试(检查程序是否能够完成预定的目标);
( 5)保存文件。
例 2.1 设计一个程序,完成简单的输出 。
返回本章
2.3 窗体和常用控件
2.3.1 常用属性
2.3.2 窗体
2.3.3 标签
2.3.4 命令按钮
2.3.5 文本框返回本章
2.3.1 常用属性
1,Name属性对象的名称。可以根据需要进行修改,是对象在程序中的唯一标识。不可重复。
2,Caption属性决定了显示在窗体标题栏或控件上的文本。
3,Font属性对象上显示文本的字体格式。在设计状态是通过“属性”窗口中的 Font
属性设置;在程序代码中则可通过 FontBold,FontItalic,FontStrikethru、
FontUnderline,FontName和 FontSize属性分别设置文本是否加粗、是否斜体、是否加删除线、是否加下划线、字体和字号。
4,Height,Width属性决定了对象的高度和宽度。如果是窗体,则包括窗体的边框和标题栏。
如图 2.4所示。属性值是以“缇( Twip)”来进行度量的,1缇为 1/20磅。
Height属性
Width属性图 2.4 窗体的 Height和 Width属性
5,Top,Left属性这两个属性既可以表示窗体在屏幕的位置;也可以表示控件在窗体中的位置。如图 2.5所示。
窗体的 Left属性窗体的 Top属性控件的 Left属性控件的 Top属性图 2.4 窗体和控件的 Top,Left属性
6,BoderStyle属性设置对象的边框样式,属性的取值范围从 0到 5。
7,BackColor属性设置对象的背景颜色。
8,ForeColor属性设置对象的前景颜色。
9,Picture属性设置对象中要显示的图片。
10,Enable属性决定一个对象是否能够对用户产生的事件做出反应。 True表示可操作即可做出反应,False为不可操作。默认值为 True,。
11,Visible属性决定对象是否可见。其值可设置为 True或者 False,默认值为 True,表示对象可见。
返回本节
2.3.2 窗体窗体就是呈现在工作屏幕上的“工作区域”,是绘制各个控件对象的“画布”,也是容纳各对象的容器。在窗体上,用户可以根据需要创建控件对象以设计出需要的界面;也可通过对控件的操作,完成不同的程序功能。
1,常用属性
( 1) MinButton,MaxButton属性
MinButton:决定窗体是否有“最小化”按钮。其值可设置为
True或者 False,默认值为 True,表示具有“最小化”按钮。
MaxButton:决定窗体是否有“最大化”按钮。其值可设置为
True或者 False,默认值为 True,表示具有“最大化”按钮。
( 2) ControlBox属性决定在运行时控制菜单框是否在窗体中显示。在运行模式下不能修改。
其值为逻辑型,True(默认值)表示显示控制菜单,False表示不显示控制菜单。构成窗体的各个对象可以用对应的属性进行设置,如图 2.5所示。
Caption属性
MaxButton属性
ControlBox属性
BoderStyle属性
MinButton属性图 2.5 窗体的属性
( 3) WindowState属性决定在运行时窗体窗口的可视状态。其值如表 2.2所示。
表 2.2 WindowState 的值
( 4) AutoRedraw属性决定窗体被隐藏或被另一窗口覆盖之后是否重新还原该窗体被覆盖或隐藏的以前的画面。
值 常数 描述
0 VbNormal 正常(默认值)
1 VbMinimized 最小化
2 VbMaximized 最大化
2,常用方法
( 1) Print方法格式,[对象名,]Print[表达式列表 ][; |,]
功能:在指定窗体上输出 [表达式列表 ]中的内容。
说明:
①,对象名”可以省略,在窗体中进行输出时对象名是
Form,如果省略不写则表示在当前窗体中输出;
②,表达式列表”是要输出的一个或多个表达式,即输出的内容。如果省略则表示输出一个空行;
③,; |,”表示如果 <表达式列表 >中有多个表达式,则表达式之间用“;”或“,”分隔开。“;”表示紧凑格式,
“,”表示标准格式。如果最后一个表达式后跟“;”或
“,”则不换行,否则换行;
④ 与 Print方法相关的函数 Tab()和 Spc()
Tab()和 Spc()函数都是用来对输出进行定位,但是它们的功能不同。
Tab( n),从最左第 1列开始算起定位于第 n列,若当前打印位置已超过 n列,则定位于下一行的第 n列。
Spc( n):从前一打印位置起空 n个空格。
例 2.2 Print方法的使用
( 2) Cls方法格式,[对象名,]Cls
功能:用于清除窗体上以前运行时输出过的内容。
( 3) Move方法格式,[对象名,]Move <左上角横坐标 >,[左上角纵坐标 ],[宽度 ],[高度 ]
功能:移动窗体或窗体上控件对象的位置,移动的同时可以改变大小。
说明:① 如果移动的是窗体则可以省略“对象名”;
② Move后面的四个参数除第一个是必须的以外,其余的都可以省略。
例 2.3 Move方法的使用
3,常用事件
( 1) Load事件在一个窗体被装载时发生 Load事件。通常 Load 事件过程用来包含一个窗体的启动代码。例如指定控件默认设置值等。
( 2) Click事件在窗体上单击鼠标左键时发生 Click事件。
( 3) DbClick事件在窗体上双击鼠标左键时发生 DbClick事件。
例 2.4单击窗体,在窗体上输出“大家一起学 Visual Basic!”,
同时将窗体的标题修改为“单击”;双击窗体,在窗体上输出“太棒了! DoubleClick事件成功!”,同时将窗体上的标题修改为“双击”。
返回本节
2.3.3 标签标签控件,主要用于显示文本。可以利用标签输出结果数据。标签不能接收用户输入的数据。
1,常用属性
( 1) AutoSize属性设置标签的大小是否可以自动调整为其显示内容的大小。
( 2) Backstyle属性决定对象的背景是否透明。其值可以设置为 0或 1。 0为透明显示,
1为不透明,默认值为 1。
( 3) MousePointer属性返回或设置一个值,该值指示在程序运行时当鼠标移动到标签上时,被显示的鼠标指针的类型。可设置的值为 0到 15,或 99。
( 4) MouseIcon属性返回或设置自定义的鼠标图标。它在 MousePointer 属性设为 99 时设置有效,否则设置无效
2,常用方法
Refresh:进行强制显示的方法。当修改了标签的 Caption属性后,如果不能立即显示,则可以使用 Refresh方法刷新后强制显示。
例 2.5 设置两个标签,程序运行后当鼠标指向第一个标签时鼠标改变为“手”形;指向第二个标签时不改变返回本节
2.3.4 命令按钮命令按钮( CommandButton)控件可以开始、中断或者结束一个进程。选取这个控件后,CommandButton显示按下的形状,所以有时也称为下压按钮。
1,常用属性
( 1) Style属性返回或设置命令按钮的上显示的是图形还是文字。在运行时是只读的。
( 2) ToolTipText属性设置一个工具栏的提示。
2,常用方法命令按钮常用的方法是 Move方法。 Move方法的格式和参数与窗体的 Move方法完全一致,它的功能是在窗体中移动命令按钮,同时也可以改变命令按钮的大小。
3,常用事件命令按钮最常用的事件是 Click事件,这个事件是单击命令按钮时命令按钮响应的事件,或按 Tab键让命令按钮获取焦点再按回车键也可以引发该事件。
例 2.6 单击一个命令按钮,在窗体上的标签中输出“欢迎参加计算机技能大赛!”,单击另一个命令按钮,在另一个标签中输出当前系统的时间。
返回本节
2.3.5 文本框文本框( Text)是编辑文本的控件,它既可以输出显示文本,接受数据的输入,还可以编辑文本框中显示的文本。
1,常用属性文本框具有共有的常用属性中大部分属性,但不包括
Caption属性,除此以外还具有其他属性。
( 1) Text属性决定文本框编辑域中的文本。其值为字符型,Text设置值最多可以有 2048个字符;但是如果 MultiLine属性设置为
True,此时最大限制大约是 32K。
( 2) Locked属性决定文本框是否可被编辑。其值为逻辑型,True(默认值)表示可编辑,False表示不可编辑。
( 3) MaxLength属性设置能够输入的字符的最大数量,其值为整型。
( 4) MultiLine属性决定 TextBox 控件是否能够接受和显示多行文本,其值为逻辑型。在运行时是只读的。 True(默认值)表示可以显示多行,False
表示不可以显示多行。
( 5) ScrollBars属性返回或设置一个值,该值指示一个对象是有水平滚动条、有垂直滚动条还是既有水平滚动条又有垂直滚动条。
( 6) PasswordChar属性返回或设置回显字符。如果 MultiLine属性被设置为 True,
设置 PasswordChar属性将不起效果。
( 7) Length,SelStart,SelText属性
SelLength属性返回或设置所选择的字符数。 SelStart属性返回或设置所选择的文本的起始点;如果没有文本被选中,
则指出插入点的位置。 SelText属性返回或设置包含当前所选择文本的字符串;如果没有字符串被选中,则为零长度字符串。这些属性在界面设计时是不可用的。
2,常用方法
SetFocus方法。
格式,[对象名 ].SetFocus
功能:将焦点移动到指定的文本框上。
3,常用事件
( 1) KeyPress事件按下并释放一个 ASCII字符键时,触发当前选中控件的 KeyPress
事件。使用格式如下:
Private Sub Form|控件名 _KeyPress([ Index As Integer,] KeyAscii As Integer)

End Sub
( 2) Change事件改变文本框的内容时引发。该事件当用户改变正文或通过代码改变
Text属性的设置时发生。使用格式如下:
Private Sub 控件名 _Change()

End Sub
( 3) LostFocus
文本框失去焦点的时候会触发此事件。使用格式如下:
Private Sub 控件名 _LostFocus()
……
End Sub
( 4) GotFocus
文本框获得焦点的时候会触发此事件。
Private Sub Text1_LostFocus()
……
End Sub
例 2.7 使用文本框输入数据,单击命令按钮后,将输入的数据增加一倍后在标签上进行输出。使用文本框输入数据时允许输入的数据长度为 4。
分析:
( 1)由于单击命令按钮后转换,因此编写命令按钮的单击事件;
( 2)要使数据增加,则应该先读取该数据,这可通过文本框的 Text属性获取;
( 3)在标签上输出,实际上就是修改标签的 Caption属;
( 4)要控制文本框中允许输入数据的长度,课通过文本框的 MaxLength属性的设置实现 。
例 2.8 将文本框中输入字符转换为 ASCII码并输出。文本框允许多行输入并带垂直滚动条;要求进行转换时,按下键盘上的一个键并松开时,待转换的字符在第一个文本框中输出,转换的结果就在第二个文本框中显示。
分析,程序运行后,每按下一个键,文本框的 KeyPress事件的 KeyAscii参数会获取它的 ASCII码,此时可以利用 KeyAscii参数进行转换。
例 2.9 在 Text1中只能输入 10个字符,超过的在 Text2中以,*”
字符显示。
分析:
( 1)由于是在第一个文本框的最后一个字符输入后,再输入的字符应该在第二个文本框中输出,因此要对每一个输入的字符进行计数,编写文本框的 KeyPress事件完成这一功能较好。因为每按下一个键盘上的键就会触发此事件,所以统计输入的字符数就转换为统计触发了多少次此
KeyPress事件;
( 2)要在第二个文本框中输出,应该通过 SetFocus方法使文本框获得焦点;
( 3)文本框中允许输入的字符个数通过设置 MaxLength属性实现;
( 4)文本框中输入的字符以,*” 显示,通过设置 PasswordChar属性实现。
返回本节
( 1)打开 Visual Basic集成开发环境,新建一个工程打开 Visual Basic集成开发环境,在“新建工程”对话框中选择“标准 exe”文件图标,单击“打开”按钮,进入集成开发环境。如图 2.1,2.2所示:
图 2.1,新建工程”对话框返回图 2.2 集成开发环境
( 2)创建对象,设置对象的属性(设计界面)
在窗体上创建两个命令按钮和一个图像框,如图 2.3所示。设置各控件属性如表 2.1所示。
对象 属性名 属性值 说明命令按钮
Name Command1 第一个命令按钮的名称
Caption 显示 1 命令按钮上显示的文本命令按钮
Name Command2 第二个命令按钮的名称
Caption 显示 2 命令按钮上显示的文本图形框
Name Image1 图像框的名称
Stretch True
图像框中的图像根据图像框的大小改变
BorderStyle 1-FixedSingle 图像框的边框样式图 2.3 创建控件对象表 2.1 属性设置
Image1
Command1 Command2
返回
( 3)编写代码(根据需要编写事件、方法过程的代码)
( 1)编写“显示 1”命令按钮 Command1的单击( Click)事件过程:
Private Sub Command1_Click()
'载入图片 Winter
Image1.Picture = LoadPicture("C:\Documents and Settings\All _
Users\Documents\My Pictures\示例图片 \Winter.jpg")
End Sub
( 2)编写“显示 2”命令按钮 Command2的单击( Click)事件过程:
'载入图片 Sunset
Private Sub Command2_Click()
Image1.Picture = LoadPicture("C:\Documents and Settings\All _
Users\Documents\My Pictures\示例图片 \Sunset.jpg")
End Sub
返回
( 4)运行和测试(检查程序是否能够完成预定的目标)
检查程序是否能够完成预定的目标,在“运行”菜单中选择“启动”菜单项。如果程序没有错误,则运行程序;如果有错误则在“运行”菜单中选择“结束”菜单项回到集成开发环境中,
重复第 2,3步骤的操作。也可以使用工具栏中的工具按钮控制程序的运行和结束,工具按钮图标如下:
:运行程序;
:结束程序。
返回
( 5)保存文件保存文件时,需要分别保存当前应用程序中创建的工程文件(,vbp)、窗体文件(,frm)和标准模块(,bas)等文件。
在具体编写 Visual Basic应用程序时,步骤 5实际上可以放在 2,3,4任意一步的前面或后面,最好是边编程边保存,
以防止数据丢失。
返回第 3 章 语言基础
3.1 数据类型
3.2 变量与常量
3.3 表达式
3.4 常用内部函数
3.1 数据类型在程序设计中,处理的最基本的对象就是数据,不同的数据具有的特性也不完全相同。每一种程序设计语言都定义了一系列的数据类型来表示各类数据的特性,在 Visual Basic中既提供了系统定义的数据类型,又允许用户自己根据实际需要定义数据类型,如图 3.1所示:
图 3.1 Visual Basic 中的数据类型基本数据类型数据类型 关键字 类型符 占用字节数 取值范围字节型 Byte 无 1 0- 255
整型 Integer % 2 -32768- 32767
长整型 Long & 4 -2,147,483,648- 2,147,483,647
单精度型 Single ! 4 负数 -3.4× 1038 - -1.4× 10-45正数 1.4× 10-45- 3.4× 1038
双精度型 Double # 8 负数 -1.7× 10308 - -4.9× 10-324正数 4.9× 10-324 - 1.7× 10308
货币型 Currency @ 8 -922,337,203,685,477.5808-922,337,203,685,477.5807
字符型 String*长度 $ 字符串长度 0- 大约 20亿逻辑型 Boolean 无 2 True或 False
日期型 Date 无 8 100年 1月 1日 - 9999年 12月 31日对象型 Object 无 4 任何 Object 引用可变型 Variant 无返回本章
3.2 变量与常量所谓 常量 是指在程序运行过程中其值不会变化的量,所谓变量 是指在程序运行过程中其值在某一时刻是确定的,但在一段时间之内是变化的量。
3.2.1 常量
3.2.2 变量返回本章
3.2.1 常量在 Visual Basic中有两种常量的形式,直接常量 和 符号常量 。
1,直接常量直接常量是指在程序中直接给出某种符合 Visual Basic数据类型的值。 例如,123,,ABC”,#09/08/2006#,True等。
2,符号常量符号常量是指用在程序中给出一个符号,间接表示某种符合
Visual Basic数据类型的值。定义符号常量的语句格式如下:
Const 符号常量名 [as数据类型 |类型符 ]=表达式不能省略,即必须给出常量的值!
例 3.1 根据输入的半径,计算球体的体积。
分析:
由于计算球体的体积需要用到?的值,而在 Visual Basic中,?” 这个符号是不能识别的,必须给出具体的值,因此,可以在程序中设置一个符号常量 pi,其值根据计算精度的需要进行设置,本例可设置为 3.1415。
返回本节
3.2.2 变量变量就是一个存储单元,它可以保存数据,而变量名实际上就是存储单元的名称。一个变量在某一个时刻只能存放一个值,后出现的值会取代变量中先出现的值。
1,变量的定义定义变量可以用两种方法:一是用 Dim语句显式定义变量;
二是隐式定义变量。
方法 1,用 Dim语句显式定义变量,其使用格式如下:
Dim 变量名 [As 数据类型 ]
或 Dim 变量名 [类型符 ]
例如,Dim a As Integer 相当于 Dim a%;
方法 2,隐式定义变量在 Visual Basic中允许变量不定义而直接使用,这种方式称为隐式定义变量。隐式定义的变量的类型是可变型的,其具体类型取决于给变量赋的值。
例如,如下代码片段:
……
a = 3
b = a + 5 'a,b是未定义的变量,其类型都是整型。
……
由于 Visual Basic中允许 隐式定义 变量,有时 容易造成一些错误,例如,以下代码片段:
Private Sub Form_Load()
Dim a,b,sum,avg As Integer
a = 2
b = 3
sum = a + b
avg = sun / 5 '系统认为 sun是新定义的变量
Print avg
End Sub
这段代码本意是求取 a和 b的平均值,但由于书写错误没有得到预期结果,这一为题可以解决吗?
可以通过,Option Explicite”语句解决在通用声明段使用,Option Explicite”语句,强制变量进行显式声明。如图 3.2所示。
这时运行程序就会报错,提示,sun”这个变量没定义 。
2,变量的命名规则
( 1)变量必须以字母或汉字开头;
( 2)变量名只能由字母、汉字、数字和下划线组成;
( 3)变量名长度不能超过 255个字符;
( 4)变量名不能是关键字。例如,sub,const,end都不能作为变量名。
例如,姓名、张 _123,a_bb都是 合法 的变量名。
1_AS,CONST,_K89都是 不合法 的变量名。
返回本节
3.3 表达式表达式是指描述数据以某种方式和顺序进行某种操作。在表达式中,运算符主要决定进行什么操作以及进行的顺序。
3.3.1 运算符
3.3.2 表达式
3.3.3 运算的优先顺序返回本章
3.3.1 运算符
Visual Basic提供的运算符主要有:算术运算符、字符串运算符、关系运算符和逻辑运算符。使用这些运算符可以进行算术运算、字符串运算、
关系运算和逻辑运算。
1,算术运算符运算符 功能 优先级 实例 实例的结果及说明
^ 指数运算 1 3^2 3的 2次方,结果为 9
﹣ 取反运算 2 ﹣ 3 3取反,结果为负 3
* 乘法运算 3 6*3 6乘以 3,结果为 18
/ 除法运算 4 10/3 10除以 3,结果为 3.33333
\ 整除运算 5 10\3 10整除 3,结果为 3
Mod 取模运算 6 10 Mod 3 10除以 3 的余数,结果为 1
+ 加法运算 7 2+3 2加 3,结果为 5
﹣ 减法运算 8 10﹣ 3 10减 3,结果为 7
2,字符串运算符字符串运算符是完成字符串的连接操作的运算符:,+”和
,&”
( 1),+”运算符其功能是将两个字符串连接生成一个新的字符串。
例如,如下代码片段:
……
X=" Visual "
Y=" Basic "
Z="6.0"
Print X+Y+Z
……
其输出结果为,Visual Basic 6.0
( 2),&”运算符其功能是将两个表达式强制的按字符串的类型连接在一起,
形成一个新的字符串。
例如,如下代码片段:
……
x = "我的学号是," 'x是字符类型
y = 200167 'y是数值类型
Print x & y '运算时系统会将 y转换成字符串类型然后进行连接操作
……
其输出结果是:我的学号是,200167
主要有以下几种情况:
如何判断,X+Y”中的,+”是加运算符还是连接运算符??
X+Y X+Y的结果
"abc"+"123" "abc123",进行连接操作。
"abc"+20 运行时系统报错,"类型不匹配 "
20+"abc" 运行时系统报错,"类型不匹配 "
200167+"123" 200290(系统会把 "123"转换为数值型,然后进行加运算)
"123"+200167 200290(系统将 "123"转换为数值型,然后进行加运算)
"123"+True 122(系统将 True转换为 -1,然后进行加运算 )
"123"+False 123(系统将 False转换为 0,然后进行加运算)
3,关系运算符运算符 功能 实例 结果
= 进行是否等于的运算 1=2 False
> 进行是否大于的运算 3>2 True
>= 进行是否大于等于的运算 "男 ">="女 " True
< 进行是否小于的运算 "Abc"<"Ade" True
<= 进行是否小于等于的运算 "54"<="5" False
<> 进行是否不等于的运算 123<>123 False
Like 进行是否匹配的运算 "张林 "like"张 " False
Is 进行比较运算 Is<10
4,逻辑运算 符运算符 功能 优先级 运算规则 实例 结果
Not 取反运算 1 当运算对象为假时,结果为真当运算对象为真时,结果为假 Not FNot T TF
And 与运算 2 当两个运算对象都为真时,结果为真,否则为假
T And T
T And F
F And T
F And F
T
F
F
F
Or 或运算 3 当两个运算对象中有一个为真时,结果为真,否则为假
T Or T
T Or F
F Or T
F Or F
T
T
T
F
Xot 异或运算 4 当两个运算对象一真一假时,结果为真,否则为假
T Xot T
T Xot F
F Xot T
F Xot F
F
T
T
F
返回本节
1,表达式的组成表达式可由变量、常量、运算符、函数和括号这些元素中的 一个,若干个 或 全部 元素 按照一定的规则构成 。表达式经过运算后可以获得一个结果,结果的类型由运算对象和运算符共同决定。
2 表达式的书写规则
( 1)表达式中的括号必须成对出现,并且不管括号嵌套几层,都使用圆括号。例如,a*( b+( c-f));
( 2)在表达式中不允许省略乘号,a*b不能写成 ab;
( 3)在 Visual Basic中表达式是从左到右在统一基准上书写的,无大小和高低的差别。例如,要写成 x1,不能出现下标。
3.3.2 表达式
3,算术表达式表达式中的 运算符是算术运算符,函数是数学函数,则称此表达式为算术表达式。其运算结果是数值。
4,字符串表达式由字符串运算符、字符串常量、字符串变量和关于字符串运算的函数构成的表达式,其运算结果也是字符串类型的。
例如,
"桂林山水甲天下," & "阳朔山水甲桂林! "
运算的结果为:“桂林山水甲天下,阳朔山水甲桂林! "
5,关系表达式由关系运算符、数值表达式、字符串表达式、常量、变量和函数构成的表达式。其运算结果是布尔类型的值。
例如,"Visaul" & "Basic" >= "Visaul" & "FoxPro"
结果为,False
6,逻辑表达式逻辑表达式又称布尔表达式,由布尔运算符、关系表达式、
布尔型常量、布尔型变量和函数组成。其运算结果为布尔类型的值。
例如,"Visaul" & "Basic" >= "Visaul" & "FoxPro" And 2^3=Sqr(4)*6/3+4
结果为,False
7,日期表达式日期表达式由算数运算符,+”和,-”、日期型常量、算术表达式、变量和函数组成。日期表达式主要是对日期型的数据进行,+”或,-”的运算,其运算结果为日期型的数据或数值型的数据。
例如,以下运算:
求取两个日期之间相差的天数,#9/12/2007#-#12/6/2005# 结果为 645;
求取一个日期加某些天后的日期,#9/12/2007#+25结果为 #2007-10-7#;
求取一个日期减某些天后的日期,#9/12/2007#-25结果为 #2007-8-18#。
8,含对象的表达式有些表达式也会对对象进行运算,对对象进行运算实际上就是对 对象的属性 进行相应的运算。运算时可以根据对象属性的数据类型进行数值运算、字符串运算、逻辑运算等。
例如:
Not AutoRedraw——是对 AutoRedraw属性进行取反的逻辑运算;
Label1.Caption & "ABC“——是对标签的 Caption属性进行字符串连接运算。
返回本节
3.3.3 运算的优先顺序表达式中可能同时出现多种运算符,在 Visual Basic中 规定了各种运算符的运算顺序,这种顺序被称为运算符的优先顺序。表达式中各种运算符的优先顺序为:
括号 >函数 >算术运算符 >字符串运算符 >关系运算符 >逻辑运算符例如,设 A=1,B=2,C=2时,分析以下语句运算的优先顺序:
A+B>C And B+C>A And C+A>B
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
① ② ③ ① ② ③ ① ②
计算的结果为 True
返回本节
3.4 常用内部函数
3.4.1 数学函数
3.4.2 字符串函数
3.4.3 时间 /日期函数
3.4.4 常用转换函数
3.4.5 随机函数
3.4.6 格式输出函数
3.4.7 Shell函数返回本章
3.4.1 数学函数函数 功能 实例 结果
Abs(N) 取绝对值 Abs(-1) 1
Sqr(N) 平方根 Sqr(4) 2
Sin(N) 正弦函数 Sin(0) 0
Cos(N) 余弦函数 Cos(0) 1
Tan(N) 正切函数 Tan(0) 0
Exp(N) eN Exp(2) 7.389056
Log(N) 以 e为底的自然对数 Log(2) 0.6931471
Sgn(N) 符号函数 Sgn(-7.8) -1
返回本节
3.4.2 字符串函数函数 功能 实例 结果
InStr(C1,C2) 在 C1中查找 C2,若找到则返回 C2首字符在 C1中的位置,若没找到则返回 0 InStr("1234","34 ") 3
Len(C) 计算字符串 C的长度 Len("abcdef") 6
Left(C,N) 取出 C中左边的 N个字符 Left("VB6.0",2) "VB"
Mid(C,N1[,N2]) 在 C中 N1位置开始取 N2长度的子串,如果 N2省略,则表示从 N1位置开始取到 C的末尾。 Mid("ABCDEf",2,3) "BCD"
Right(C,N) 取 C中右边的 N个字符 Right("VB6.0",3) "6.0"
Replace(C,C1,C2) 在 C中将 C1替换为 C2 Replace("VB5","5 ","6 ") VB6
Join(A[,K]) 将数组 A中元素以 K为分隔符连接生成字符串 A=array("A","B ","C ")Join(A,"_") "A_B_C"
Split(C,K) 按分隔符 K将 C分隔为字符数组 B=Split("a,b,c",",")
B(0)= "a "
B(1)= "b "
B(2)= "c "
Space(N) 产生 N个空格的字符串 Space(4) "□□□□ "
String(N,C) 产生由 N个 C的首字符组成的字符串 String(3,"*^"”) "***"
Trim(C) 删除 C两边的空格 Trim("□ ABC□ ") "ABC"
LTrim(C) 删除 C左边的空格 LTrim("□ ABC□ ") "ABC□ "
RTrim(C) 删除 C右边的空格 RTrim("□ ABC□ ") "□ ABC"
例 3.2 窗体上有一个标签其显示的文本为“欢迎你参加计算机技能大赛!”,在文本框中输入姓名,单击命令按钮后将
“你”替换为输入的姓名,要求用 Replace函数实现。
返回本节
3.4.3 日期 /时间函数函数 功能 实例 结果
Date 返回系统当前日期 Date 2007/7/2
Now 返回系统当前的日期和时间 Now 2007-7-12 14:37:03
Time 返回系统当前的时间 Time 14:41:52
Day(C|D) 返回当前日期是月中第几天(1-31) Day(#2007/7/12#)或 Day("2007/7/12") 12
Month(C|D) 取得当前日期的月份 (1-12) Month(#2007/7/12#)或 Month("2007/7/12") 7
Year(C|D) 取得当前日期的年份( 1753-2078) Year(#2007/7/12#)或 Year("2007/7/12") 2007
WeekDay(C|D) 返回是星期几 (1-7) Weekday(#6/26/2007#) 3
DateAdd(C,N,D) 给日期 D按 C的形式增减 N DateAdd("d",5,#6/30/2007#) 2007-7-5
DateDiff(C,D1,
D2)
按 C的形式计算 D1和 D2之间的间隔
DateDiff("d",#1/23/2006#,
#6/30/2007#) 523
例如:
计算当前系统时间距离 2012年元旦还有多少个月的表达式为:
DateDiff("m",Date,#1/1/2008#)
返回本节
3.4.4 常用转换函数函数 功能 实例 结果
Asc(C) 返回 C中第一个字符的 ASCII码的值 Asc("kfcd") 107
Chr(N) 返回 ASCII码值为 N所对应的字符 Chr("71"),G”
Fix(N) 取整 Fix(-7.6) -7
Int(N) 取不大于当前数的最大整数 Int(-3.2)或 Int(6.6) -46
Round(N) 四舍五入取整 Round(-2.6) -3
Hex(N) 十进制数转换成十六进制数 Hex(20) 14
Oct(N) 十进制数转换成八进制数 Oct(20) 24
LCase(C) 将字母转化为小写字母 LCase("aBfkCd"),abfkcd”
UCase(C) 将字母转化为大写字母 UCase("aBfkC"),ABFKC”
Str(N) 将数值转换为字符串 Str(123),123”
Val(C) 将数字字符串转换为数值 Val("2367") 2367
返回本节
3.4.5 随机函数随机函数即 Rnd函数。用于产生随机数。
格式,Rnd(N)
功能:取得的随机数,产生 0~ 1之间的数,包括 0,不包括 1。
说明:
( 1)在实际的一个应用中可以通过其他函数或运算的配合取得任意的需要的随机数。
例如,取 1~ 100之间的整数。其运算式为,Int(Rnd*100+1)
取 1~ 4之间的整数。其运算式为,Int(Rnd*4+1)
( 2)当 N>0 时每次产生的随机数都不一样;当 N=0产生与上一次相同的随机数;当 N<0每次产生一样的随机数。
( 3)为了保证每次产生的随机数都不一样,每次要在使用 Rnd函数前先执行 Randomize语句,产生种子数,其格式为,Randomize[(种子数 )]。
返回本节
3.4.6 格式输出函数格式输出函数为 Format,其作用是使数值、时间日期或字符串类型的数据按照指定的格式进行输出。其使用格式如下:
Format(表达式,[格式字符串 ])
功能:将表达式按照格式字符串指定的格式输出。
说明:
① 表达式,可以是常量或表达式;
② 格式字符串,可以是字符串变量或常量,一般由格式说明符构成。根据进行格式化的数据的类型不同,其格式说明符也不同。
例如,代码片断(数值格式化)
num1=1267.457
num2=1267.4
Print Format(num1,”00000.000”);Format(num1,”#####.###”)
Print Format(num2,”000.0”);Format(num2,”###.#”)
结果为,01267.457 1267.457
1267.4 1267.4
例如,代码片段(字符串格式化)
str1 = "Visual Basic"
Print Format(str1,"<@@@@@@@@@@@@@")
结果为:”□ visual basic”
例如,如下代码段(时间日期格式化)
date1=#2007/9/12#
Print Format(date1,”mmmm-dddd-yyyy”)
结果为,September-Wednesday-2007
返回本节
3.4.7 Shell函数在 Visual Basic 中,Shell函数可以调用在 DOS或 Windows
中运行的可执行程序。其使用格式如下:
Shell(命令字符串 [,窗口类型 ])
说明:
① 命令字符串:要打开的可执行程序的路径及可执行程序的文件名及文件类型;
② 窗口类型:打开可执行程序时,可执行程序窗口的大小,其值是 0-4,6。
例如:
k = Shell("notepad.exe",1)——打开“记事本”
k = Shell(“D:\Microsoft Office\OFFICE11\WINWORD.exe”,1)——打开” Word“
注意打开“记事本”和
,Word”时,路径的区别!
返回本节第 4章 程序的基本控制结构
4.1 书写程序的规则
4.2 顺序结构
4.3 选择结构
4.4 循环结构
4.5 其他基本语句
4.6 简单应用
4.1 书写程序的规则
1,书写 Visual Basic语句,不用区分大小写,系统会自动将关键字中的字母转换;
2,书写各种语句都应该严格按照 Visual Basic中的语法格式要求进行书写;
3,Visual Basic中允许多条语句在一行进行书写,语句之间用冒号“:”
分隔即可。 Visual Basic一行最多可有 255个字符;
例如,a=b,x=y,f=c
4,对于太长的语句为了不影响阅读程序,可以分行显示,其写法是在需要分行的地方在分行后的第一行最末尾加“□ _”(一个空格和一个,_”);
例如,print Format(num1,”00000.000”);Format _
(num1,”#####.###”)
5,可以在程序中加注释语句,提高程序的可读性。注释语句是以 Rem或,'”
引导注释内容。
返回本章
4.2 顺序结构顺序结构的特点是按照语句书写的先后顺序执行语句,流程图如图 4.1所示。
返回本章语句 1
语句 2
……
语句 n
图 4.1 顺序结构顺序结构只能完成一些简单操作。
例如,输入输出、赋值等操作。
4.2.1 赋值语句
4.2.2 输入数据的基本方法
4.2.3 输出数据的方法
4.2.1 赋值语句赋值语句是编写程序时常用的语句,功能是将某个给定值赋给某个变量或赋给某个需要进行属性值修改的对象 。
格式 1,变量名 =表达式例如,a=56,表示将整数 56赋值给 a变量。
格式 2,对象名,属性名 =表达式例如,Text1.Text= "顺序结构 "
表示修改文本框的 Text属性的值为“顺序结构”。
1,赋值语句的执行过程
i = i + 4
首先计算表达式,i+4”的值?
=
通过赋值号?
给左边的变量或对象的属性名赋值?
2,对于赋值语句格式的说明
( 1),=”是赋值号,不是数学计算中的等号;
( 2)赋值号,=”的左边只允许出现变量名、对象的属性,不允许出现函数或表达式;
例如,5=num1? Int(12.35)=k?
( 3) Visual Basic中不允许在同一个赋值语句中对多个变量赋值。
例如:要给 a,b,c三个变量都赋值为 3
a=3,b=3,c=3? a=b=c=3?
3,赋值语句中数据类型的处理当赋值号左边的 变量 和右边的 表达式数据类型 不一致 的时候,该 如何处理? 可分为以下几种情况处理:
数值型 数值型 以变量的数据类型为准字符型 字符串 ( 1)表达式为数字字符串,则转换为数值型,再赋值。
( 2)表达式是非数字字符,则报错数值型 布尔型变量 表达式 处理方式则系统将表达式中的 True转换成 -1,将 False转换成 0,再进行赋值布尔型 数值型 则系统将表达式中的 0转换成 False,将 非 0值转换成 True,然后再赋值字符型 非字符型 系统将表达式转换为字符型的数据再赋值。
返回本节
4.2.2 输入数据的基本方法
1,使用文本框输入数据在使用文本框作为接收用户输入数据的对象时,实际上是利用了文本框的 Text属性接收用户输入的数据。
例 4.1 计算表达式 X2+2X+1的值,要求用文本框接收用户输入 X的值。
2,使用 InputBox函数输入数据使用 InputBox函数可以打开一个对话框,接收用户输入的数据。
格式:
变量 =InputBox([提示信息 ][,标题 ][,默认值 ][,x坐标 ][,y坐标 ])
说明:
标题,对话框标题;
默认值:输入 区缺省值函数返回字符类型例如:
Dim strName As String * 40,strS1 As String * 40 图 4.2 输入对话框
strS1 = "请输入你的姓名 " + Chr(13) + Chr(10) + "然后单击确定 "
strName= InputBox(strS1,"输入框 ",,100,100)
在图 4.2所示输入对话框中,输入“王晓明” 后,变量 strName获得键盘输入的值。
例 4.2 判断某个年份 X是否为闰年,要求由 InputBox函数接收 用户输入年份
X的值。
返回本节
4.2.3 输出数据的方法
1,用文本框输出数据用文本框输出数据就是在文本框中显示数据。将输出的数据赋值给文本框的 Text属性,可以在文本框中输出数据。
2,用标签输出数据用标签输出数据就是在标签中显示数据。在标签中显示数据,将输出的数据赋值给标签的 Caption属性,可以在标签中输出数据。
例 4.3 设计一个窗体,完成将输入的大写字母转换为小写字母输出,输入的小写字母转换为大写字母输出的功能。其结果的输出分别用文本框和标签实现,数据的输入用文本框接收。
3,用 Print方法输出数据用 Print方法可以在窗体上直接输出需要的数据。输出数据时可使用 Tab函数和 Spc函数进行输出形式的控制。
例 4.4 在窗体中输出如图 4.3所示的图形。
图 4.3 运行结果
4,用 MsgBox对话框输出数据输出数据也可以使用 MsgBox对话框完成,MsgBox主要是用于输出一些提示信息等,所以又称为消息框。
函数格式,变量 =MsgBox(提示信息 [,按钮 ][,标题 ])
过程格式,MsgBox 提示信息 [,按钮 ][,标题 ]
说明:
变量:用于接收函数的返回值,是一个整型的变量;
提示信息和标题:含义和用法与 InputBox函数相同;
按钮:是整型表达式。用来设置消息框中按钮的数目和类型;
按钮参数的值如表 4.1所示:
表 4.1 按钮的参数值

项目 常数 值 说明按钮数目及类型
vbOKOnly 0 显示“确定”按钮
vbOKCancel 1 显示“确定”和“取消”按钮
vbAbortRetryIgnor
e
2 显示“中断”、“重试”和“忽略”按钮
vbYesNoCancel 3 显示“是”、“否”和“取消”按钮
vbYesNo 4 显示“是”和“否”按钮
vbRetryCancel 5 显示“重试”和“取消”按钮图标类型
vbCritical 16 严重警告信息
vbQuestion 32 显示“?”图标
vbExclamation 48 显示“!”图标
vbInformation 64 显示,i”图标默认按钮
vbDefaultButton1 0 第一个按钮时默认按钮
vbDefaultButton2 256 第二个按钮时默认按钮
vbDefaultButton3 512 第三个按钮时默认按钮例如:
s = MsgBox("是否保存对“文档 1”的更改? ",3 + 48 + 0,"Microsoft Office Word")
按钮 常数 值 按钮 常数 值确定 vbOK 1 忽略 vbIgnore 5
取消 vbCancel 2 是 vbYes 6
终止 vbAbort 3 否 vbNo 7
重试 vbRetry 4
以上语句可实现如图 4.4
所示的消息框:
当前消息框上有 3个按钮,用户选择了哪一个按钮,s就会记录用户的选择。
不同的按钮返回值不同,s
中记录的值也不同。
各个按钮的返回值,如表 4.2所示。
图 4.4 消息对话框表 4.2 按钮返回值例 4.5 当文本框获得光标的时候,弹出如图 4.5所示的消息框,
单击“确定”按钮后,允许在文本框中输入数据。
返回本节图 4.5 消息框
4.3 选择结构在处理问题时需要根据一些条件决定执行什么样的操作。
在 Visual Basic中提供了选择结构,通过该结构,可以根据给定的条件执行对应操作。选择结构又分为单分支选择结构、双分支结构和多分支选择结构。
4.3.1 单分支选择结构
4.3.2 双分支选择结构
4.3.3 多分支选择结构
4.3.4 嵌套选择结构
4.3.5 Select Case语句
4.3.6 条件判断函数返回本章
4.3.1 单分支选择结构单分支选择结构是在判断条件后,执行条件满足时对应的语句块,不满足时什么都不执行的结构。单分支结构的流程图如图 4.6所示。
返回本节条件表达式语句块
True
False
图 4.6 单分支选择结构流程图单分支选择结构的语法格式有两种,一是语句块的形式;二是单语句的形式。
格式 1:
If <条件表达式 > Then
语句块
End If
格式 2:
If <条件表达式 > Then 语句块例如,如下程序片段
If a > b Then
b = a
End If
例 4.6 输入 a,b,c的值,判断输入的值能否构成三角形,如果能,则用
MsgBox对话框输出“可以构成三角形!”的提示信息。
If a>b then b = a等价返回本节
4.3.2 双分支选择结构双分支选择结构是先判断条件,条件满足执行一个语句块,
不满足,执行另一个语句块的语句结构。双分支选择结构的流程图,如图 4.7所示。
条件表达式语句块 2 语句块 1
TrueFalse
图 4.7 双分支选择结构双分支结构的语法格式有两种,一是语句块的形式;二是单语句的形式。
格式 1:
If <条件表达式 >Then
语句块 1
Else
语句块 2
End If
格式 2:
If <条件表达式 >Then 语句块 1 Else 语句块 2
注意,语句块 1和 语句块 2只能执行一个,执行哪一个语句块取决于 <条件表达式 >的值。
例 4.7 输入 x的值,计算下面函数对应的 y值。
返回本节
4.3.3 多分支选择结构多分支选择结构是完成在若干个可能的条件中选取满足的一个条件,执行相应的语句块的语句结构。多分支选择结构的流程图如 4.8所示。
条件表达式
1
条件表达式
2
……
条件表达式 n
语句块 n+1语句块 n语句块 2语句块 1
False
False
False
FalseTrue True True
图 4.8 多分支选择结构格式:
If <条件表达式 1> Then
语句块 1
ElseIf <条件表达式 2> Then
语句块 2
……
ElseIf <条件表达式 n> Then
语句块 n
[Else
语句块 n+1]
End If
执行过程,判断条件表达式 1,为真,则执行语句块 1,否则判断表达式 2,
为真,则执行语句块 2,否则判断表达式 3……,以此类推,判断表达式
n的值如果为真执行语句块 n,如果为假执行语句块 n+1。
说明:
① EndIf不能分开写为 End If;
② 只能根据条件,执行语句块 1到语句块 n+1中的一个语句块;
③ 如果条件同时满足多个条件表达式,则只执行第一个满足条件的语句块。
例 4.8 输入一个字符,判断它是数字字符、字母字符还是其他字符。
If a >= "a" And a <= "z" Or a >= "A" And a <= "Z" Then
MsgBox Text1.Text & "是字母字符! ",64
ElseIf a >= "0" And a <= "9" Then
MsgBox Text1.Text & "是数字字符! ",64
Else
MsgBox Text1.Text & "是其它字符! ",64
End If
返回本节
4.3.4 嵌套选择结构嵌套选择结构是指在一个选择结构里再包含一个选择结构 。
例 4.9 用文本框输入数据,当单击回车键时,判断当前数据是否是偶数,并将结果在标签中输出。
If KeyAscii = 13 Then '先判断是否按下回车键,结束数据输入
If Val(Text1.Text) Mod 2 = 0 Then '判断输入的是否是偶数
Label1.Caption = Text1.Text & "是偶数! "
Else
Label1.Caption = Text1.Text & "不是偶数! "
End If
End If
返回本节
4.3.5 Select Case语句
Select Case语句又称为情况语句,它根据一个表达式的值,在一组相互独立的可选语句序列中挑选出要执行的语句序列。
格式:
Select Case <表达式 >
Case <表达式列表 1>
语句块 1
Case<表达式列表 2>
语句块 2
……
Case<表达式列表 n>
语句块 n
[Case Else
语句块 n+1]
End Select
只能有一个!
可以是字符串表达式、数值表达式和变量必须与表达式类型一致,可以是以下几种情况之一:
表达式,Case 27
用“,”分隔的若干值,Case 1,3,5,7,9
表达式 1 to 表达式 2,Case 2 To 3
用 Is运算符,Case Is>70
例 4.10 输入一个字符,判断它是数字字符、字母字符还是其他字符。(用 Select Case语句完成)
Select Case a '用 Select Case语句块实现多分支选择结构
Case "a" To "z"
MsgBox Text1.Text & "是字母字符! ",64
Case "A" To "Z"
MsgBox Text1.Text & "是字母字符! ",64
Case "0" To "9"
MsgBox Text1.Text & "是数字字符! ",64
Case Else
MsgBox Text1.Text & "是其它字符! ",64
End Select
返回本节
4.3.6 条件判断函数
1,IIf函数格式,IIf(条件表达式,表达式 1,表达式 2)
功能,判断条件表达式值,为真返回表达式 1的值,为假返回表达式 2的值例如:
If x > 0 Or x = 0 Then
y = x ^ 2 + x + 3
Else
y = 1
End If
2,Choose函数格式,Choose(整数表达式,表达式列表)
功能,根据整数表达式的值,决定返回表达式列表中的某一个表达式。
例如:
x = Choose(Weekday(Date),"星期日 ","星期一 ","星期二 ","星期三 ",_
"星期四 ","星期五 ","星期六 ")
y = IIf(x > 0 Or x = 0,x ^ 2 + x + 3,1)
可改写为返回本节
4.4 循环结构在解决实际问题时,有一部分操作会重复进行,这时可以用循环结构解决。重复执行某段程序的操作称为循环操作,用循环结构进行描述。
4.4.1 For……Next 循环
4.4.2 Do……Loop 循环
4.4.3 嵌套循环返回本章
4.4.1 For……Next 循环如果预先已经知道循环的次数,则可用 For……Next 循环实现。其流程图,如图 4.9所示。
循环变量=初值循环变量是否超出终值循环体语句块循环变量=循环变量+步长
False
True
图 4.9 For……Next 循环
1,语法格式
For 循环变量 = 初值 to 终值 [Step 步长 ]
<循环体语句块 >
Next [循环变量 ]
循环次数的计算公式:
必须是数值型!
Step步长,可以是下列几种情况:
步长 >0,初值小于终值;
步长 <0,初值大于终值;
步长 =0,形成死循环,即永远执行循环体内的语句,不能正常结束循环;
省略 Step 步长,初值小于终值,步长为 1。
循环体语句块中,如果出现
Exit For语句,则程序执行到 Exit
For语句时会跳出循环结构,执行循环结构之后的语句。
2,语句执行过程
( 1)给循环变量赋初值,执行循环体语句块;
( 2)执行 Next [循环变量 ],使循环变量的值增加步长;
( 3)比较循环变量的值是否超出终值,“否”则执行循环体;
( 4)重复执行( 2)( 3),直到循环变量的值超出终值。
For 循环变量 = 初值 to 终值 [Step 步长 ]
<循环体语句块 >
Next [循环变量 ]
循环变量 = 初值
(1)
循环体语句块
t [循环变量 ] (2)
终值
( 3)比较,若否则循环体语句块例 4.11 判断一个数是否是素数。
For i = 2 To a - 1
If (a Mod i) = 0 Then flag = False,Exit For
Next I
例 4.12 编写程序,在窗体上输出如图 4.10所示的图形。
图 4.10
For i = 1 To 4
Print Tab(10); String(2 * i - 1,"A");
Next i
For i = 4 To 1 Step -1
Print Tab(10); String(2 * i - 1,"B");
Next i
3,使用 For……Next 循环应注意的问题
( 1)在使用 For……Next 循环的时候,当结束循环后,循环变量中的值是第一个超出终值的值。
例如,如下程序片段,在结束循环后,循环变量 i的值为 5而不是 4。
s = 2
n = 3
For i = 1 To 4
s = s + n
Next i
( 2)在使用 For……Next 循环的时候,除非有特殊要求,否则不要在循环体内修改循环变量的值,以免发生错误。例如,比较以下两个程序段的结果。
程序段 1,程序段 2:
For i = 1 To 4 For i = 1 To 4
Print i; i=i+1,Print i
Next i Next i
程序段 1的输出结果为,1 2 3 4,而程序段 2的输出结果为,2 4。
返回本节
4.4.2 Do……Loop 循环如果预先不能确定循环次数,可以通过条件控制循环是否进行,可以用
Do……Loop 循环实现。流程图,如图 4.11所示。
循环条件循环体语句块
True
False
循环条件循环体语句块
False
True
a) Do While……Loop
c) Do Until……Loop
循环体语句块循环条件True
False
循环体语句块循环条件False
True
b) Do ……Loop While
d) Do ……Loop Until
图4.
11
Do
……Lo
op
循环
1,Do ……Loop 循环的语法格式:
格式 1,格式 2:
Do While|Until <条件表达式 > Do
循环体语句块 循环体语句块
Loop Loop While|Until<条件表达式 >
例如,下面两个代码段是等价的。
代码段 1,代码段 2:
Do Until n > 7 Do While n<7
n = n + 2 n = n + 2
Loop Loop
Print n Print n
例 4.13 从键盘上输入若干个数字,输入负数时结束输入,并统计数字的平均值。要求单击窗体时使用 InputBox函数输入数据,在窗体上输出结果。
2,使用 Do……Loop 循环应注意的问题
( 1)在 Do……Loop 循环的循环体语句块中必会有修改条件表达式中变量的语句,否则会产生死循环。在条件表达式中出现的变量称为循环变量;
( 2)结束循环后循环变量的值应该为第一个不符合条件表达式的值;
( 3)对于已知循环次数的循环也可以由 Do……Loop 循环实现。
返回本节
4.4.3 嵌套循环所谓嵌套循环结构是指在循环结构的内部再写循环结构,允许嵌套若干层。
例 4.14 输出九九乘法表
For i = 1 To 9 '控制行的变化
For j = 1 To 9 '控制列的变化
Print Tab((j - 1) * 8 + 2); i & "× " & j & "=" & i * j; '输出每一个算式
Next j
Print '一行输出 9个算式后换行输出
Next i
思考:如何输出上三角或下三角?
注意:嵌套循环书写的正确性第一种,? 第二种,?
For i= 1 to n For i= 1 to n
For j=1 to m For j=1 to m
…… ……
Next j Next i
Next j Next j
返回本节
4.5 其它基本语句
1,Goto语句格式,Goto 行号 |标号功能,无条件的转向 Goto语句指出的语句的行号或标号的语句进行执行。
2,Exit语句
Visual Basic中有多种形式的 Exit语句,用于退出某种控制结构的执行。例如,Exit For,Exit Do,Exit Sub,Exit Function等形式的 Exit语句。
3,End语句
Visual Basic中有多种形式的 End语句,用于结束控制某种结构或结束某个事件等。例如,End If,End Function,End Sub等形式的 End语句。独立的 End语句用于结束一个程序的运行,它可以放在任何事件过程中。
返回本章
4.6 简单应用
4.6.1 交换两个存在变量中的数
4.6.2 累加、连乘及推广应用
4.6.3 试凑法(穷举法)
返回本章
4.6.1 交换两个存在变量中的数通过如下代码实现:
t = x '交换
x = y
y = t
思考:三条语句的顺序是否能够交换?
例 4.15 交换两个变量中的数,并输出交换后的结果。
返回本节算法:
( 1)将 x中的值赋值给 t X y
t
( 2)将 y中的值赋值给 x?
( 3)将 t中的值赋值给 y?
4.6.2 累加、连乘及推广应用
1,累加是在原有的和的基础上再加上新的数。
例如:
1~ 100的 5或 7的倍数的和
Sum = 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
例 4.16 求 1+2+3+……+n 的和。
返回本节
2,连乘连乘是在原有的积的基础上乘上新的数。
例如:
3~ 10的乘积
t = 1
For i =3 To 10
t = t * i
Next i
Print t
例 4.17 求 100以内奇数的乘积。
3,累加和连乘的推广例 4.18 求 1! +2! +……+,n!。 n的值由用户输入。
t = 1
s = 0
For i = 1 To n
t = t * i?计算求和的阶乘项
s = s + t '对阶乘求和
Next i
返回本节
4.6.3 试凑法(穷举法)
试凑法是将可能出现的各种情况一一罗列测试,判断是否满足条件,采用循环结构来实现。经典问题 ——百元买百鸡问题。
例 4.19 已知买 1只小鸡 0.5元钱,买 1只公鸡 3元钱,买 1只母鸡 4元钱,现有 100元钱,要买 100只鸡,问可买多少只公鸡、母鸡和小鸡。
设母鸡、公鸡、小鸡各为 x,y,z只,根据题目要求,列出方程为:
x+y+y=100
3x+2y+0.5z=100
三个未知数,两个方程,此题有若干个解。
方法一:三个未知数利用三重循环来实现。
方法二:从三个未知数的关系,利用两重循环来实现。
返回本节方法一:三个未知数利用三重循环来实现
For x = 1 To 25
For y = 1 To 33
For z = 1 To 100
If x + y + z = 100 And x * 4 + y * 3 + z * 0.5 = 100 Then
Print "小鸡个数为,"& z;"母鸡个数为,"& x;"公鸡个数为,"&y
End If
Next z
Next y
Next x
思考,Print语句可否放在 Next x后面?
返回方法二:从三个未知数的关系,利用两重循环来实现
For x = 1 To 25
For y = 1 To 33
If x * 4 + y * 3 + (100 - x - y) * 0.5 = 100 Then
Print "小鸡个数为,"& z;"母鸡个数为,"& x;"公鸡个数为,"&y
End If
Next y
Next x
返回返回本节第 5章 数组和 和自定义类型
5.1数组的定义
5.2数组的基本操作
5.3控件数组
5.4自定义数据类型
5.1数组的定义数组是一组有序且数据类型相同的 变量的集合 。
在计算机中,数组存放在一块连续内存区域,数组中的每个变量称为一个数组元素。每个数组元素都有一个下标。
数组元素的 一般形式 为,a(n)。
5.1.1静态数组的定义
5.1.2动态数组的定义数组必须先定义后使用。
数组名下标返回本章
5.1.1 静态数组的定义静态数组:使用 数值常量或符号常量定义 数组每一维的大小的数组。
数组在定义时可按维数多少分为 一维数组 和 多维数组 。
1,一维数组一维数组是指具有一个下标的数组。其定义格式如下:
Dim 数组名(下标) [As 数据类型 ]
例如,Dim R(3) As Integer (存储如下所示),Dim a(-3 To 4) As Date等。
必须是常量或常数表达式
“下标”的形式也可以只给出上界,此时默认下界为 0。用户可以用 Option Base语句重新设置数组的默认下界 。
例如,Option Base 1
Ra(0)
Ra(1)
Ra(2)
Ra(3)
一维数组 R
2,多维数组多维数组是指具有多个下标的数组(二维以上 ) 。在 Visual Basic中多维数组的维数最多为 60维。其定义格式如下:
Dim 数组名(下标 1,[,下标 2…] ) [As 数据类型 ]
例如,Dim B(1,1 To 5) As Integer (存储如下所示)
B(0,1) B(0,2) B(0,3) B(0,4) B(0,5)
B(1,1) B(1,2) B(1,3) B(1,4) B(1,5)
二维数组 B
二维数组一般用于表示表格和矩阵返回本节
5.1.2 动态数组的定义动态数组,定义数组时不定义数组大小,在使用数组时才重新定义数组大小的数组。建立动态数组分以下两步:
( 1)用 Dim语句定义数组,但不指定数组大小,其定义格式如下:
Dim 数组名( ) [As 数据类型 ]
( 2)使用数组时,用 ReDim语句重新定义数组,其定义格式如下:
ReDim数组名 [ Preserve ](下标 1,[,下标 2…] ) [As 数据类型 ]
使用 Preserve后,
可改变多维数组最后一维的上界,但不能改变其他各维的范围例如,Private Sub Command1_Click()
Dim a( ) As Integer

ReDim a(1 To 2,1 To 3)

ReDim Preserve a(1 To 2,1 To 7)
End Sub
例 5.1设计一个应用程序,在数组中存放 4个数据并输出该数组,单击命令按钮后将数组中可存放的数组元素个数扩展一倍后再在窗体上输出该数组。
运行结果如图 5.2所示。
图 5.2 单击命令按钮后的运行结果返回本节
5.2 数组的基本操作
5.2.1 数组的输入和输出
5.2.2 求数组元素的最大(小)值和总和
5.2.3 数组排序
5.2.4数组元素的插入
5.2.5数组元素的删除返回本章
5.2.1数组的输入和输出
1,数组的引用数组的引用通常是指对数组元素的引用。使用格式如下:
数组名(下标)
例如,Dim a(1 to 4) as integer
a(3)=3
( 1)引用数组元素的数组名、类型和维数必须与数组定义时一致。
( 2)引用数组元素时,下标取值必须在建立数组时所指定的取值范围中,否则运行时将显示“下标越界”错误。
例如,Dim B(5) as double

Print B(7)
返回本节
2,数组的输入数组定义后可以给数组元素赋值。数组元素的初次赋值称为初始化。
常用以下两种方法:
方法 1,通过文本框或 InputBox函数输入数据。当数组元素较少时,可以使用 多条赋值语句 给每一个数组元素赋值;而当数组元素较多且下标有规律时,可以使用 循环结构 给每一个数组元素赋值。
方法 2,如果需要赋值的元素较少,可以通过 Array函数实现。它会将所列的值依次赋值到下标从 0开始的数组元素中去。其使用格式如下:
数组名 =Array(值 1,值 2,… )
例如,Dim a
a = Array(2,4,6,8)
数组每维下标的下界和上界可以分别通过 Lbound函数和 Ubound函数获得,其使用格式如下:
Lbound(数组名 [,维 ])
Ubound(数组名 [,维 ])
数组下标的下界数组下标的上界例如,Dim a(1 To 2,1 To 5,1 To 9)
Print Lbound( a,2)
表示输出数组 a第二维的下界例 5.2 输入 6个人的姓名,并按输入顺序存入相应的数组元素中。
3,数组的输出可以通过 Print方法输出,也可以通过标签或文本框等控件输出。输出整个数组可以使用循环结构。
例 5.3 创建一个应用程序,要求随机产生 6个字符,放入一维数组中,首先按一行在窗体输出;然后按两行三列的矩阵在窗体输出。运行结果如图
5.4所示。
图 5.4运行结果思考,如何实现将随机产生的数据 逆序 输出?
Print "两行三列输出为,"
For i = 1 To 6
Print (i); Spc(2);
If (i Mod 3 = 0) Then
Print
End If
Next i
例 5.4定义一个 3× 3的矩阵,在窗体上输出该矩阵和它的下三角阵。运行结果如图 5.5所示。
图 5.5运行结果下三角阵规律,每行的终止列号和行号相同,只要内层循环的终止值用外层的循环变量表示 。
思考,如何输出矩阵上三角阵?
矩阵中每个元素都有两个下标,因此使用二维数组 存储表示。
输出矩阵可以通过二重循环 实现 。
5.2.2求数组元素的最大(小)值和总和
1,求数组元素最值例 5.5 在 6个学生的成绩中查找出最高成绩。
分析,假定数组中第一个元素最大,将下标记在变量 pos中,然后将假定最大值和后面的数组元素依次比较,用变量 pos用来记录的将是这组成绩中最高成绩的下标。
2,求数组元素和例 5.6计算并输出 n名学生的平均年龄。
可以通过在 循环结构 中累加每一个数组元素的值运算得到。
返回本节
5.2.3数组排序常见的排序算法有选择法和冒泡法。
1,选择法( 按递增次序排序 )
基本思想,每次在所有未排好次序的数中选出最小数,然后交换到这批无序数的第一个位置上,如此反复,直到所有元素都排好序。
演示,(假设有如下数组)
第 1趟排序
7 33 5 17 32 3
7 33 5 17 32 3
交换 7和 3
比较结果
< 选出前 2者中 最小 为 7
7 33 5 17 32 3 > 选出前 3者中 最小 为 5
7 33 5 17 32 3 < 选出前 4者中 最小 为 5
7 33 5 17 32 3 < 选出前 5者中 最小 为 5
7 33 5 17 32 3 < 选出前 6者中 最小 为 3
操作选择法排序
3 33 5 17 32 7第 2趟排序前第 2趟排序后 3 5 33 17 32 7
本趟交换 7和 3
本趟交换 33和 5
第 3趟排序后 3 5 7 17 32 33 本趟交换 33和 5
第 4趟排序后 3 5 7 17 32 33 本趟不交换第 5趟排序后 3 5 7 17 32 33 本趟不交换排序结束,n个数仅进行 n-1趟排序。
注意,每趟排序后仅交换一次。
例 5.7 随机产生 6个数,用选择法按递增的顺序排序并输出每趟排序后的结果。
2,冒泡法基本思想,每次在所有未排好次序的数据中顺序进行两两比较,将较大数交换到后一个位置上。一 趟比较完毕,一个最大的数沉底成为数组中的最后一个元素,n个数,经过 n-1轮比较后完成排序。
假设有数组,5 33 7 17 32 29
第 1趟排序 5 33 7 17 32 29 <
5 33 7 17 32 29 > 交换 33和 7的位置交换不交换 5和 33的位置
5 7 33 17 32 29 > 交换 33和 17的位置比较结果
5 7 17 33 32 29 > 交换 33和 32的位置
5 7 17 32 33 29
5 7 17 32 29 33
> 交换 33和 29的位置
33后无元素,第
1趟排序结束演示:
第 1趟排序结束后,数组中最小数据已排好在 最后 1个元素 中。
进行第二趟排序,对 5-29这 5个数据排次序,方法类似第 1趟,
直到所有元素排好次序为止。
冒泡法第 2趟排序前 5 7 17 32 29 33
第 2趟排序后第 3趟排序后第 4趟排序后第 5趟排序后
5 7 17 29 32 33
5 7 17 29 32 33
5 7 17 29 32 33
5 7 17 29 32 33
紫色表示已排好次序思考,上述程序段是否能实现 n个数使用冒泡法排序?
For i=1 to n
For j=1 to n-i
If a(j-1)>a(j) then
x=a(j)
a(j)=a(j-1)
a(j-1)=x
endif
Next j
Next i
冒泡法:每趟排序可交换多次。
返回本节
5.2.4数组元素的插入
1,在静态数组中有序插入元素基本思想:
( 1)从数组中第一个元素开始,逐个与待插入元素的值进行比较,直到某个数组元素(假设下标为 i)的值大于或等于待插入元素的值,确定插入位置是 i;
( 2)将最后一个元素到下标为 i的所有数组元素依次后移一个位置,空出插入位置;
( 3)最后将数据存放到下标为 i的数组元素中。
x 42 i
( 1)
①②
1 7 13 45 68
( 2)
( 3)
例 5.9 任意输入一个数据,插入在一个递增有序的数组中,要求插入后数组仍有序,并输出插入该数据后的数组。
插入演示
2,在动态数组中有序插入元素基本思想,先判断数组是否存满元素,如果数组没有存满,则执行和静态数组相同的插入操作;否则 先重新定义 动态数组的大小,给数组追加足够存储空间后再插入。
例 5.8 任意输入一个数据,插入在一个递增有序的数组中,要求插入后数组仍有序,并输出插入该数据后的数组。
Dim a As Variant

ReDim Preserve a(n + 1)
’n表示数组下标上界返回本节
5.2.4数组元素的删除数组元素的删除可分为两种:按位置删除和按值删除。
基本思想,(1)先查找到删除元素的位置 i;
(2)从删除元素的下一个元素开始到最后一个元素,
每个元素依次前移一位 。
13 1 7 42 6845
( 1)找到 42的位置 i
ix 42
删除演示 ( 2)从第 i+1位置开始依次前移
① ②
思考,上述程序段是否能实现在数组 a中删除元素 x?
返回本节
pos=0
Do while ((pos<=Ubound(a)) and (x<>a(pos)))
pos=pos+1 ‘查找
Loop
For j=pos+1 to Ubound(a)
A(j-1)=a(j)?后移删除
Next j
5.3 控件数组控件数组:在 Visual Basic中,一组相同类型的控件组成的的集合
。其中每个控件称为该控件数组的元素。
例如:若干个命令按钮可以组成一个 命令按钮控件数组 。
特点:各控件元素具有 相同 的名称属性,同时 控件数组元素的 下标 由控件数组元素的 Index属性 表示。
5.3.1控件数组的创建
5.3.2控件数组的应用假设数组由 3个命令按钮组成,则 3
个的 name 属性均为 commandk;
3个控件的 Index属性分别为 0,1,2.
返回本章
5.3.1控件数组的创建创建方法,
方法 1,在窗体上选定一个控件,
然后将它 复制 和 粘贴,会显示如图 5.10所示的对话框,单击“是” 按钮后,可以创建一个控件数组; 图 5.10 创建控件数组方法 2,在窗体上创建一些同类型的控件,依次设置它们的 Index属性,
然后把所有控件改成同一名称;
方法 3,在窗体上创建一个控件,首先设置它的 Index属性,然后在程序中使用 Load语句 添加新的控件数组元素。 Load语句的使用格式如下:
Load 控件名 (索引号)
例如,Load Command1 ( 2) 创建一个名称为 Command1、下标为 2的控件数组元素控件数组解除(将控件数组元素修改为普通控件)
方法 1,先将控件数组中各控件名称修改成 不同 的,然后将每个控件的
Index属性 清空 ;
方法 2,方法 2可以通过 Unload语句将用 Load语句添加到控件数组中的某个控件还原为普通控件。 Unload语句的使用格式如下:
Unload 控件名 (索引号)
例如,Unload Command1 ( 2)
将一个由 Load方法建立的名称为
Command1且下标为 2的控件数组元素从控件数组 Command1中删除。
返回本节
5.3.2控件数组的应用控件数组中的所有控件 共享 同一组 事件过程 。用户通过事件过程 参数 Index可以判断出控件数组中触发事件的控件元素,获取控件元素的属性值等。
例 5.9使用控件数组设计一个校园十佳歌手大赛的评分程序。假设有六个评委进行评分,评分时先去掉一个最高分和一个最低分,然后将其余分数平均后得到选手的最终得分。要求:
( 1)单击“开始评分”按钮,可进行评分,然后显示最终得分;
( 2)单击“清除”按钮,可清除评委们的打分;
( 3)单击“全部输出”按钮,可输出所有已评选手的最终得分。程序运行结果如图 5.11所示。
图 5.11运行结果返回本节
5.4自定义数据类型自定义数据类型,又称为记录类型,是用户根据实际需要定义的由一批数据类型组成的复合数据类型。组成自定义数据类型的每个数据类型称为成员或数据项。
5.4.1自定义数据类型的定义
5.4.2自定义数据类型变量的定义和使用
5.4.3自定义数据类型数组的应用返回本章
5.4.1自定义数据类型的定义自定义数据类型使用方法和其他基本数据类型完全相同,必须先定义后使用,其定义格式如下:
[Private|Public] Type 数据类型名
<成员名 >1 As 数据类型

<成员名 n> As 数据类型
End Type
可以是简单变量或数组,是字符串类型则必须指出字符串的长度可以是 Visual Basic的基本数据类型或其他自定义数据类型例如,Type phonelist
name As String * 4?姓名
phonenumber As Single?电话号码
End Type
返回本节
5.4.2自定义数据类型变量的定义和使用
1,自定义数据类型变量的定义自定义数据类型变量必须先定义后使用,其定义形式和简单变量相同。
例如,Dim x As phonelist 定义一个自定义数据类型的变量 phonelist
2,自定义数据类型变量的使用一个自定义数据类型变量 一批不同类型的变量的集合。
它的每个成员 一个变量,可以独立使用,使用格式如下:
<自定义数据类型变量 >,<成员名 >
例如,x.xm = "彤彤 "
x.phonenumber = 7446010
3,With语句的使用格式如下:
With 变量名语句块
End With
将“彤彤”和,7446010”两项数据保存到数据类型为 phonelist的变量 x中例如,With x
,name = "张三 "
,phonenumber = 7446010
End With
返回本节
5.4.3自定义数据类型数组的应用自定义数据类型数组是指数组元素类型是自定义数据类型的数组,它经常在实际问题中被使用。
例 5.10设有 n个人参加男子 100米短跑,编写程序,要求:
( 1)单击“输入”按钮,可输入一名运动员的信息(运动员编号、所属学院和成绩),最多不超过 100名运动员;
( 2)单击“显示”按钮,显示已输运动员的所有信息。
( 3)单击“按成绩输出”按钮,在当前输入信息下按成绩名次输出运动员的信息。运行结果如图 5.12所示。
图 5.12运行结果返回本节第 6章 通用过程
6.1通用过程的概念
6.2函数过程的定义和调用
6.3子过程的定义和调用
6.4参数的传递
6.5过程的嵌套和递归调用
6.6变量的作用域和生存期
6.1 通用过程的概念通用过程,用户定义的具有某项功能的独立程序段。
优点,使用它可以减少程序中相同代码的重复编写,使事件代码结构更清晰。
执行流程,每次调用时 首先中断 主调程序,系统 记录 返回地址,然后 转向执行 被调用的通用过程,结束后,返回 主调程序 继续执行 后续语句。
例如,在窗体单击事件中调用通用过程 Proc1的执行流程如图 6.1所示。
返回本章通用过程 系统定义的内部函数和过程功能上
Private Sub Form_Click( )


调用过程 Proc1


End Sub
过程 Proc1( 参数 )


过程结束图 6.1通用过程调用时的执行流程在 Visual Basic中,通用过程分为两类:
函数过程子过程
6.2 函数过程的定义和调用函数过程,是指由 Function…End Function 定义的通用过程。
特点,在调用过程中,函数过程名可以带回返回值。
6.2.1函数过程的定义
6.2.2函数过程的调用返回本章
6.2.1函数过程的定义函数过程遵循先定义后使用的原则。定义常用方法:
方法 1,在窗体的“代码窗口”的,通用声明段,中直接编写函数过程;
方法 2:选择“工程”菜单中的“添加模块”或“添加类模块”菜单项,然后在打开的标准模块文件或类模块文件的通用声明段中直接编写函数过程;
方法 3,选择“工具”菜单中“添加过程”菜单项,然后通过设置添加过程对话框在代码窗口中产生函数过程的框架,最后在框架中编写完函数过程。
使用方法 3时,需要 先打开 代码窗口,否则“添加过程”菜单项不可用。
函数过程定义格式如下:
[Public︱ Private] Function 函数过程名 [ (形式参数列表 ) ]
[As 数据类型 ]函数过程体局部变量或常量的定义
[语句块 1]
函数过程名 =表达式
[Exit Function]
[语句块 2]
End Function
函数过程体表示函数返回值(简称函数值)的类型简称函数名,用于存储函数值
“Public”可略,表示定义的是全局的函数过程 ;
,Private”表示定义的是局部的函数过程。
“形式参数”是各种类型的变量或数组名,只在 调用时 才有具体的值 。定义格式如下:
[ByVal︱ ByRef] 形式参数 1 [( )] [As 数据类型 ]
例如,ByVal n As Integer
函数过程 不能嵌套定义,即在一个函数过程中不能 定义函数过程或子过程。
例 6.1编写一个计算长方形面积的函数过程。
分析,可设置两个形式参数分别表示长方形的长和宽,然后计算面积,通过赋值语句将计算结果赋值给函数名。为了不产生溢出,形式参数和函数值的类型均设置为双精度类型。
返回本节
6.2.2函数过程的调用函数过程不能自动执行,必须通过调用才能执行,因此通常在事件中被调用。调用格式如下:
函数过程名(实际参数列表)
注意:
1.实际参数必须和形式参数 保持 个数、类型和位置 相同 ;
2.函数过程调用时,不能独立使用,必须作为 表达式或表达式的一部分 出现在语句中;
3.函数过程调用结束时,函数名带值返回到主调程序中。
例 6.2编写程序,要求使用例 6.1定义的函数过程求长方形面积。
返回本节只能是常量、有具体值的变量、表达式或数组 。
6.3 子过程的定义和调用子过程,是指由 Sub…End Sub 定义的通用过程。
特点,在调用过程中,子过程名 不能 表示返回值 。
用途,实现某种功能的处理或获得多个返回值 。
6.3.1子过程的定义
6.3.2子过程的调用返回本章
6.3.1子过程的定义
1 子过程的定义格式子过程遵循先定义后使用的原则。 定义格式如下:
[Public︱ Private] Sub 子过程名 [ (形式参数列表 ) ]
局部变量或常量定义
[语句块 1]
[Exit Sub]
[语句块 2]
End Sub
子过程名的命名规则、形式参数列表和函数过程名的相同。
2 子过程和函数过程的联系和区别联系,子过程和函数过程 性质 相同。
区别,( 1) 子过程名和函数 过程名 的类型和作用不同;
( 2)子过程和函数过程 调用形式 不同。
子过程体例如:
Sub movecmd (ByVal x As Double,
ByVal y As Double)
Command1.move x,y
End Sub
返回本节
6.3.2子过程的调用调用子过程有 2种方法:一是直接调用;二是使用 Call语句调用。
1.直接调用调用格式,Sub过程名 实际参数表例如,movecmd x,y 直接调用子过程 movecmd
2.使用 Call语句调用调用格式,Call Sub过程名 (实际参数表 )
例如,Call movecmd (x,y) 使用 Call语句调用子过程 movecmd
例 6.3编写程序,打印如图 6.2所示的图形,要求使用子过程实现。
图 6.2 调用子过程后的打印结果返回本节
6.4 参数的传递在调用过程时,调用双方通过 参数 进行数据传递。
6.4.1形式参数和实际参数
6.4.2值传递和地址传递
6.4.3数组参数的传递返回本章
6.4.1形式参数和实际参数在程序中,按参数所在位置不同,可将参数分为 2类:
1.形式参数形式参数,简称为形参,是指在 过程定义时 过程名后出 现的参数。
特点,过程没调用前,它没有具体值。
作用,从主调程序 获得 数据或将被调过程的数据返回给主调程序。
2.实际参数实际参数,简称为实参,是指在在 调用过程时 过程名后出 现的参数。
特点,它必须有具体值 。
作用,调用时,它表示传递给过程的 数据 。
例如,下面 2个程序代码片段分别表示定义和调用了一个子过程 Sk。
返回本节
Sub Sk (ByRef x As Integer,ByVal y As Integer)
Print x,y
End Sub 形式参数
a=3
b=4
Call Sk (a,b)
实际参数
6.4.2值传递和地址传递形参和实参之间的传递,按传递内容的不同,可将分为 2类:
1.值传递指定方式,过程定义时,在形参前添加关键字 ByVal 。
例如:
2.地址传递指定方式,过程定义时,在形参前添加关键字 ByRef或省略 关键字 。
两种传递方式区别(如图 6.3 所示):
Sub Sk (ByVal n As Integer)

End Sub
Sub Sk (ByRef n As Integer)

End Sub
实参形参
3
3
实参形参
3复制值传递 地址传递图 6.3两种地址传递方式的示意图
3 值传递和地址传递的选用原则
① 如果过程调用时 仅传递 数据,过程内不修改实参的值,则形参应选用 值传递 方式;
② 如果过程调用结束时由形参将 操作结果返回 主调程序,则形参必须使用地址传递 方式;
③ 当形参是 自定义数据类型和数组 时,必须使用 地址传递 方式 。
例 6.4编写一个使用值传递和地址传递的示例。要求:设计一个子过程,有两个形参,第一个使用值传递方式,第二个使用地址传递方式,子过程功能是两个参数各自加 1;编写程序调用这个子过程,并输出调用前后实参的值。
返回本节
6.4.3数组参数的传递要求,数组作为参数,必须使用 地址传递 方式 。
作用,数组参数可 实现 一批数据 的传递 。
格式,形参使用数组名和一对圆括号表示,不用给出维数的上界;实参可使用数组名表示。
例 6.5编写一个子过程,功能是将数组元素逆序存放,设计一个程序调用这个子过程,并输出调用前数组元素的值 。运行结果如图 6.4所示。
分析,逆序存放可以通过交换数组元素实现,交换时,从两端开始,不断两两交换,直到交换到数组中间为止。 重复交换操作可用循环实现。
返回本节图 6.4 运行结果
6.5 过程的嵌套和递归调用在过程体中不能再定义过程,但可以再调用过程 。
6.5.1过程的嵌套调用
6.5.2过程的递归调用返回本章
6.5.1过程的嵌套调用过程的嵌套调用,是指用户可以在一个过程中调用另一个过程的程序结构。
其执行过程如图 6.5所示。
例 6.6设计两个子过程,一个功能是交换两个数的值,另一个功能是输出两个数的值,编写程序调用这两个过程,实现将两个数交换后再输出。
例 6.7 编写一个函数过程,求两个数中的较小数,设计程序嵌套调用这个过程,实现求 3个数中的最小数。
返回本节图 6.5 过程嵌套调用时的执行过程
PrivateSub Form_Click( )


Sum=F(n)


End Sub
Function F( y)

Call bb()

F=…
End Sub
Sub bb()


End Sub
6.5.2过程的递归调用过程可以调用其他过程,也可以调用自身。
递归调用,一个过程中直接或间接地调用自身。
1,递归的概念递归,指用自身结构去描述自身,它是程序设计和数学中一种描述问题的重要 算法和方法 。
例如,典型的是阶乘运算的定义:
n!= n(n-1)! ( n> 1时)
2,递归调用在实际应用中,常用递归调用解决一些问题。通常在以下情况考虑使用递归调用:
( 1) 所研究问题的 定义 具有 递归特性,例如:数学上的阶乘运算、级数运算和 Fibonacci数列等;
( 2) 所研究问题使用 递归求解 比其它方法更 简单,例如:汉诺塔问题和八皇后问题等。
递归定义例 6.8编写一个求 n!的函数过程,要求用递归实现 。
分析,根据题意,在数学上,n!可以表示为 n*(n-1)!,因此函数过程
fac(n) = n*fac(n-1),可以归纳出函数过程 fac的递归形式如下:
返回本节
fac(n)=
n* fac(n-1) n>1
1 n=1
递归需要有 边界条件、递归前进段和递归返回段 。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
在使用递增归策略时,必须有一个明确的递归结束条件,
称为 递归出口 。
思考,例 6.8的递归出口是什么?
例 6.9编写一个求 n阶汉诺塔( Hanoi)问题的子过程,要求用递归实现。 n
阶汉诺塔问题:假设有三个分别命名为 A,B和 C的塔座,在塔座 A上插有 n个直径自上而下越来越大的编号为 1,2,…,n的圆盘,现在要求将
A座上的 n个圆盘通过 B座移至 C座并按同样顺序叠排,圆盘移动时必须遵循以下规则:
( 1)圆盘可以插在 A,B和 C中任一塔座上;
( 2)每次只能移动一个圆盘;
( 3)任何时刻大圆盘都不能压在较小圆盘之上。运行结果如图 6.6所示 。
分析,移动 n个盘子的汉诺塔问题可以归结为移动 n-1个盘子的问题,…,
依此类推,最后问题可以简化归结到只移动一个盘子。
图 6.6 汉诺塔问题
6.6 变量的作用域和生存期在程序中,变量用于表示数据。
变量的使用范围 变量的作用域变量的使用时间 变量的生存期。
6.6.1变量的作用域
6.6.2变量的生存期返回本章决定
6.6.1变量的作用域变量的作用域,变量的可使用范围。
按变量的作用域不同,可将变量分为 3类:
局部变量,模块级变量 和 全局变量 。 其作用域等如表 6.1所示。
作用域 局部变量 模块级变量 全局变量窗体模块 标准模块定义方式 Dim或 Static Dim,Private Public
定义位置 在过程中在窗体通用声明段中或标准模块
( Module)中在窗体通用声明段中或标准模块( Module)中能否被本模块中其他过程使用 否 能 能能否被本应用程序中其他模块使用 否 否能,但在变量前加窗体名能表 6.1 变量的作用域、定义和使用规则例 6.10设计一个程序,定义三个不同作用域的变量,查看其作用域,运行结果如图 6.7所示 。
分析,可 选择在程序中不同位置修改各种变量的值,并在主调事件中输出。
注意,当在同一模块中出现作用 域不同 但 名称相同 的变量时,Visual Basic
系统优先使用 作用域最小 的变量。
例如:
图 6.7 不同作用域变量的运行结果
Public x As Integer
Private Sub Form_DblClick( )
Dim x As Integer
x = 5
Print x
End Sub
思考,在窗体双击事件中如何访问这个变量 x?
返回本节
6.6.2变量的生存期变量的生存期,变量可使用的时间 。
按变量的生存期不同,可将变量分为 2类:
1.动态变量是指没有使用 Static关键字定义的变量。
特点,随着过程的调用动态分配存储单元,当过程 结束 后,系统会 释放 变量所占的空间。
2.静态变量是指使用 Static关键字定义的变量。
特点,程序运行后只初始化一次,当该变量所在过程 结束 后,系统会 保留其值,直到整个程序结束。
例 6.11输出在程序中定义的动态变量和静态变量的值。
思考:用 Static关键字定义的静态局部变量和用 Dim关键字定义的模块级变量有什么异同点?
返回本节第 7章 常用控件
7.1 控件的分类
7.2 常用标准控件
7.3 常用 ActiveX控件
7.1 控件的分类在 Visual Basic中,控件主要包括两类:标准控件和 ActiveX控件。
7.1.1 标准控件又称为内部控件,是指默认状态下显示在 工具箱中 的,除指针外所有工具建的具体对象的实例。 Visual Basic中的标准控件共 20个。
7.1.2 ActiveX控件
ActiveX控件是一种 ActiveX部件。 ActiveX部件是由 ActiveX技术创建的一个或多个对象组成,ActiveX部件以扩展名为,ocx 的文件形式独立存在。
本章所介绍的 ActiveX控件及所在部件如表 7.1所示。
返回本章
ActiveX控件 ActiveX部件进度条 Mcirosoft Windows Common Control 6.0
通用对话框 Mcirosoft Common Dialog Control 6.0
UpDown控件 Mcirosoft Windows Common Dialog Control-2
6.0
选项卡 Mcirosoft Tabbed Dialog Control 6.0
表 7.1 ActiveX控件表
1.ActiveX控件的添加方法具体步骤:
( 1)选择“工程”菜单中“部件”菜单项,打开“部件”对话框,如图 7.1所示。
( 2)选定所需 ActiveX控件所在的 ActiveX部件左侧的复选框。
( 3)单击“确定”按钮。
图 7.1,部件”对话框单击该按钮可以选择将其他目录中的 ActiveX部件添加到工具箱中,使用方法与标准控件相同。
返回本节
7.2 常用标准控件
7.2.1单选按钮
7.2.2复选框
7.2.3框架
7.2.4列表框
7.2.5组合框
7.2.6时钟
7.2.7滚动条返回本章
7.2.1 单选按钮 ( OptionButton)
单选按钮是一个 选择性控件,外观如图 7.2所示。
通常以 组 的形式出现,只允许用户 选择 其中的 一 项。
当某项 被选后,单选按钮左边圆圈中将出现一个黑点 。
当单选按钮 成组 出现时,默认第 一 项被选定。
1.常用属性
( 1) Caption属性返回或设置单选按钮上显示的文本。
( 2) Value属性是单选按钮的 默认属性,决定单选按钮的状态。其值为逻辑型,当值为
False(默认值)时,表示单选按钮未被选中;当值为 True时,表示单选按钮被选中。
图 7.2 单选按钮
( 3) Style属性决定单选按钮的外观样式,可设置属性值 如表 7.2所示。
表 7.2 单选按钮的 Style属性值
2常用方法常用的是 Move方法 。该方法可在窗体上移动单选按钮的位置,同时可改变单选按钮的大小。
3常用事件单选按钮可响应的事件很多,常用事件是 Click事件。
当用户 单击 后,单选按钮将自动 改变 Value属性的值。
常数 设置值 描述
Standard 0 (默认值) 表示单选按钮采用圆形按钮形状
Graphical 1 表示单选按钮采用命令按钮形状例 7.1设计一个程序,通过单选按钮为窗体设置不同的背景颜色,运行结果如图 7.3所示。
思考,如果要程序刚开始,窗体上所有单选按钮都未选定,应如何修改?
图 7.3 运行结果返回本节
7.2.2 复选框 ( CheckBox)
图 7.4 复选框复选框也是一个 选择性 控件,外观如图 7.4
所示。每一个复选框提供一个选项。
与单选按钮明显的 区别 是:复选框如果以组形式出现后,用户可以根据需要 选 定 一项或多 项。
1.常用属性
( 1) Caption属性返回或设置复选框上显示的文本。
( 2) Value属性是复选框的 默认属性,返回或设置复选框的状态,可设置属性值如表 7.3所示。
常数 设置值 描述
Vbunchecked 0(默认值) 表示复选框未被选定
Vbchecked 1 表示复选框被选定
Vbgrayed 2(灰色对号) 显示一个选定标记,表示复选框部分选定表 7.3 复选框的 Value属性值
( 3) Style属性返回或设置复选框的外观样式。可设置属性值如表 7.4所示。
常数 设置值 描述
Standard 0(默认值) 表示复选框采用方框形状
Graphical 1 表示复选框采用命令按钮形状表 7.4 复选框的 Style属性值
2.常用方法复选框的常用方法是 Move方法。
3.常用事件复选框可以响应的事件很多,常用事件有 Click事件。当用户 单击 后,复选框将 自动改变 Value属性的值。
例 7.2创建一个应用程序,通过复选框为文本框设置字体格式。运行结果如图 7.5所示 。
图 7.5 运行结果返回本节
7.2.3 框架( Frame)
创建框架及其内部控件的常用方法,
方法 1,先在窗体上创建框架,然后在框架中创建控件。
方法 2,在窗体上创建框架和控件后选定要放入框架的控件,然后将它们剪切到剪贴板,再从剪贴板将选定控件粘贴到框架内即可。
1.框架常用属性
( 1) Caption属性设置框架的标题名称。当 Caption属性为空时,框架显示为封闭的矩形框。
框架功能类似,容器,,内 部可以 放置控件,外观如图 7.6所示。
框架之间相互独立,对每个框架的操作会影响其内部控件。
图 7.6 框架
( 2) Enabled属性决定框架是否可用,当值为 True(默认值)时,表示框架可用,它内部控件可用与否决定于各自的 Enabled属性;当框架的 Enabled属性值为
False时,框架及内部的所有控件均不可用。
( 3) Visible属性设置框架是否可见。当值为 True(默认值)时,表示框架可见,它内部的控件可见与否决定于各自的 Visible属性;当框架的 Visible属性值为
False时,表示框架及其内部控件均不可见。
2.框架常用事件是 Click事件和 DblClick事件。
例 7.3创建一个应用程序如图 7.7所示,
通过单选按钮设置选购手机时的品牌和价格要求。
图 7.7 单选按钮和框架应用示例返回本节
7.2.4 列表框 ( ListBox)
1.常用属性
( 1) List属性返回或设置列表框中的项目内容,是一个字符数组。该数组中依次存放列表框各项目的内容,数组下标从 0开始。
例如,在图 7.8中,List1.List( 1)值为 "数据结构 "。
( 2) ListCount属性获取列表框中项目的总个数,其属性值为整型。列表框中最后一个项目的下标表示为 ListCount-1。该属性只能在代码窗口中引用,是 只读 属性。
列表框是一个可以 显示 多个选择项目的 列表,外观如图 7.8所示。用户 可 以从列表框中 选 择一个或多个项目,但 不能直接修改其中的内容。
图 7.8 列表框
( 3) ListIndex属性获取程序运行时列表框中最近被选定项目的下标。其属性值为整型,当用户未选中任何一个项目时,其值为 -1。该属性只能在代码窗口中设置或引用。
( 4) Text属性获取程序运行时列表框中当前被选定项目的内容。该属性只能在代码窗口中被设置或引用。
例如,在图 7.8中,当前被选中的项目内容为“离散数学”可 等价表示为
List1.list(List1.ListIndex)或者 List1.Text。
( 5) Selected属性决定列表框中各项目的状态。其属性值为逻辑型数组,在该数组中依次存放列表框各项目的状态,数组下标从 0开始。当某个项目被选定时,对应的数组元素值为 True;否则值为 False(默认值)。该属性只能在代码窗口中被设置或引用。
( 6) MultiSelect属性决定列表框是否可以多选。 可设置属性值 如表 7.5所示。
常数 设置值 说明
None 0(默认值) 表示只能进行单选
Simple 1 表示可以进行简单多选,选择时通过鼠标和空格键操作
Extended 2
表示可以进行扩展多选,可以用 Shift
键(或 Ctrl键)实现连续(或不连续)
多项的选择表 7.5 列表框的 MultiSelect属性值
( 7) Sort属性决定程序运行时列表框中的项目排序方式。
( 8) Style属性返回或设置列表框的外观显示样式。
2.常用方法
( 1) AddItem方法格式,<列表框名 >,AddItem <项目内容 > [,索引值 ]
功能:在列表框中增加 1个新项目。
( 2) RemoveItem方法格式,列表框对象,RemoveItem 索引值功能:在列表框中删除 1个指定项目。
( 3) Clear方法格式,列表框对象,Clear
功能:清除列表框中所有选项。
3.列表框常用事件列表框的常用事件是 Click事件。当用户单击后,列表框将 自动改变对应项目的 Selected属性值。
例 7.4设计一个选课程序,可从公共选修课列表框中将所选课程添加到已选课程列表框;用户可以单选,也可以多选,单击“确定”命令按钮后在窗体上输出选课结果,并清空已选课程列表框。运行结果如图 7.9所示。
返回本节图 7.9 运行结果分析,多项添加(或删除)可以用循环结构实现。
7.2.4 组合框( ComboBox)
组合框是一种 兼有 文本框和列表框功能特性的控件。如图 7.10所示,它允许用户在组合框的文本框部分输入信息;还允许用户在列表框部分选择项目。
图 7.10 组合框三种样式示意图
1.组合框常用属性组合框的 List属性,ListCount属性,ListIndex属性,Sort属性和列表框的对应属性完全相同 。
组合框没有 Selected和 MultiSelect属性,使用时最多只能选择一个项目。
下面列出组合框与列表框不同的常用属性。
( 1) Style属性决定组合框的外观显示样式。 可设置属性值 如表 7.6所示,显示样式如图 7.10所示。
组合框名称 设置值 描述下拉式组合框
( Dropdown Combo) 0
由一个文本框和一个下拉式列表框组成。
单击下拉箭头可以打开列表框,选定项目显示在文本框中;可以在文本框中输入信息简单组合框
( Simple Combo) 1
由一个文本框和一个列表框组成。功能类似下拉式组合框,仅仅列表框不是下拉形式显示下拉列表框
( Dropdown List) 2
只有一个下拉式列表框,没有文本框,
只能显示和选择,不能输入表 7.6组合框的 Style属性设置值
( 2) Text属性是组合框的 默认属性 。其属性值为字符型,当组合框的 Style属性值为 0或 1时,它可以返回或设置文本框的内容;当 Style属性值为 2时,在程序运行时它表示被选中的项目。
2.组合框常用方法是 AddItem方法,RemoveItem方法和 Clear方法。这三种方法的格式及功能与列表框相同。
3.组合框常用事件组合框的常用事件是 Click事件。
例 7.5设计一个程序,利用组合框设置标签的字号大小 。
例 7.6设计一个利用简单组合框管理学院图书信息的程序。假设已输入的书名无重复,要求:
( 1)程序初始运行时,在组合框中有序显示已有图书名;
( 2)单击“插入新书”按钮,将不重复的新购图书名通过文本框插入列表框,同时列表框保持有序;
( 3)单击“查询”按钮,通过文本框获得查找图书名,如果查找书名在列表框中存在,显示所在位置,否则在窗体上显示“库存无此书”;
( 4)单击“修改”按钮,可修改组合框中有误的图书名;
( 5)单击“删除选定图书”按钮,删除组合框中选定的图书名。运行结果如图 7.11所示。
图 7.11 插入新书后运行结果分析,修改可以在文本框部分进行,
修改后将结果重新替换列表框部分原来的图书名 。
返回本节
7.2.6 时钟 ( Timer)
时钟控件又称为计时器控件。它可以按照设定的时间间隔周期发生并执行 Timer事件 。它的计时是基于 Windows系统内部计时器。时钟在 设计阶段是 可见 的,在 运行 阶段 不可见 。
1.时钟常用属性
( 1) Enabled属性是时钟的 默认属性 。返回或设置时钟是否可用,其值为逻辑型,当值为
True(默认值)时,表示时钟可以使用;当值为 False时,表示时钟停用,此时不发生 Timer事件。
( 2) Interval属性设置两个 Timer事件之间的时间间隔。其值为整型,介于 0~ 64767之间,
以 ms(0.001秒 )为单位。默认值为 0。
2 时钟常用事件时钟的常用事件只有 Timer事件。时钟发生 Timer事件的前提是 时钟的
Enabled属性为 True并且 Interval属性非 0。
例 7.7设计一个以分和秒为单位的计时程序。当用户选择“开始计时”按钮时,时钟开始计时,并不断显示当前已计数的时间;当单击“计时停止”按钮时,时钟停止计时。运行结果如图 7.12所示。
例 7.8设计一个程序,能够自动循环显示图片。窗体上分别设置“开始”和“停止”
两个命令按钮,当单击“开始”按钮后,窗体中的图像框每隔1秒自动切换一张图片,反复循环;当单击“停止”按扭时,停止切换图片。运行结果如图 7.13
所示。
图 7.12 运行结果 图 7.13 运行结果返回本节
7.2.7 滚动条滚动条有垂直滚动条( VscrollBar)和水平滚动条( HscrollBar)两种,外观如图
7.14 滚动条所示。通常在窗体中协助观察数据或确定位置,也可以用作数据的输入工具 。
图 7.14 滚动条
1.滚动条常用属性
( 1) Value属性是滚动条的 默认属性,返回或设置滑块当前位置所代表的值。其属性值为整型,介于 Min属性和 Max属性之间,默认值为 0。
( 2) Max属性设置滑块位置所能代表的最大值,其属性值为整型,默认值为 32767。
( 3) Min属性设置滑块位置所能代表的最小值。其属性值为整型,默认值为 0。
( 4) LargeChange属性设置每次单击滚动条空白处(滑块与两端箭头之间的空白区域)时,
Value属性所增加或减小的值,其属性值为整型。
( 5) SmallChange属性设置用户单击滚动条两端箭头时 Value属性所增加或减小的值,其属性值为整型。
2.滚动条常用事件
( 1) Scroll事件当拖动滑块时会触发 Scroll事件。
( 2) Change事件当改变 Value属性时(滚动条内的滑块位置改变)会触发 Change事件。
与 Scroll事件不同,当拖动滑块时 Change事件不发生,只在拖动结束时才发生一次。单击滚动条两端箭头或单击滚动条空白处,滚动条 Value
值变化,仅发生 Change事件,不发生 Scroll事件。
例 7.9设计一个程序,通过滚动条调节标签的大小。运行结果如图 7.15所示。
例 7.10利用时钟、标签和滚动条控件,设计一个模拟红绿灯控制汽车行驶的程序,设计界面如图 7.16所示,汽车和红绿灯都由标签实现,运行结果满足以下要求:
( 1)程序开始运行时,显示红灯,汽车不动;
( 2)单击“开始”按钮后,显示绿灯,汽车向右匀速运动;
( 3)拖动滚动条上的滑块可以改变汽车的移动速度。
图 7.15 运行结果 图 7.16 设计界面返回本节
7.3 常用 ActiveX控件
7.3.1进度条
7.3.2UpDown控件
7.3.3选项卡返回本章
7.3.1 进度条( ProgressBar)
1.常用属性
( 1) Orientation属性设置进度条的显示形式。 可设置属性值 如表 7.7所示。
进度条是一个可以显示事务处理进度的 ActiveX
控件,位于 Microsoft Windows Common
Control 6.0部件中。进度条有水平和垂直两种显示形式,如图 7.17所示。
图 7.17 进度条两种显示形式示意图常数 设置值 描述
ccOrientationHorizon
tal
0(默认值) 表示进度条显示为水平方向
ccOrientationVertical 1 表示进度条显示为垂直方向表 7.7 进度条的 Orientation属性值
( 2) Value属性属性值为整型。程序运行时获取控件已填充部分的值。仅能在代码窗口中设置或引用。
( 3) Max属性设置进度条全部被填充时最大允许的值,其属性值为整型,默认为 100。
( 4) Min属性设置进度条未被填充时最小允许的值,其值为整型,默认值为 0。
程序运行时,进度条是逐块地进行填充,每次显示的填充块数由
value属性与 max和 min属性之间的比值决定。
2.进度条常用事件进度条的常用事件只有 Click事件。
例 7.11设计一个程序,通过进度条显示数组赋值进度。
返回本节
7.3.2 UpDown控件用户可以在“属性”窗口或 UpDown控件的属性页中设置其属性。
打开属性页的方法,先在 UpDown控件上单击右键,然后在弹出式菜单中选择“属性”菜单项。 UpDown控件的属性页如图
7.19所示。
UpDown控件是一种 Windows应用程序中常见的控件,位于 Mcirosoft
Windows Common Dialog Control
2-6.0部件中。如图 7.18所示。它常与其他控件一起合作使用,方便用户修改合作控件的某项属性。 图 7.18 UpDown控件
BuddyControl属性 BuddyProperty属性图 7.19 UpDown控件的属性页
1.常用属性
UpDown控件的 Max属性,Min属性,Value属性和滚动条的对应属性完全相同。特有的属性:
( 1) BuddyControl属性决定合作者控件。其属性值为控件名称。
( 2) BuddyProperty属性决定与合作者保持同步的属性,其属性值为属性名。
( 3) Increment属性获取每次单击时位置改变的数值,其属性值为整型。
注意:程序运行时,合作者的属性将和 UpDown控件的属性同步变化。
2.常用事件
( 1) UpClick事件单击 UpDown控件向上的箭头时触发的事件。
( 2) DownClick事件单击 UpDown控件向下的箭头时触发的事件。
当用户单击 UpDown控件后,UpDown控件将自动改变 Value属性值。
例 7.12设计一个程序,通过 UpDown控件设置标签字号。通过文本框显示字号,当单击 UpDown控件向上的箭头时,字号每次增大 6,当单击 UpDown控件向下的箭头时,字号每次减少 2,当单击“确定”按钮时,将文本框中字号设置为标签字号。运行结果如图 7.20所示。
图 7.20 运行结果返回本节
7.3.3 选项卡( SSTab)
1.常用属性用户可以在“属性”窗口或选项卡控件的属性页中设置其属性。常用属性,
( 1) Style属性决定选项卡样式。 可设置属性值 如表 7.8所示。
选项卡是一个用于设置具有多个选项卡的窗体或对话框的 ActiveX控件,位于
Mcirosoft Tabbed Dialog Control 6.0
部件中。每个选项卡功能类似窗体,可以在其中创建其他控件。
图 7.21 时钟选项卡常数 设置值 描述
ssStyleTabbedDialog 0(默认值) 选项卡中的字体是粗体
ssStylePropertyPage 1 每个选项卡的宽度都调整到其标题中文本的长度,选项卡中的字体不是粗体表 7.8 SSTab控件的 Style属性设置值
( 2) Tabs属性决定选项卡数目,其属性值为整型。
( 3) TabsPerRow属性决定每行显示出的选项卡数目,其属性值为整型。
( 4) Row属性获取 SSTab控件总行数。在设计时,由 Tabs属性和 TabsPerRow属性决定选项卡的 Row属性。
( 5) ShowFocusRect属性当选项卡控件获得焦点时,设置是否在其标题上显示焦点矩形。
( 6) Tab属性获取当前使用的选项卡号。对于 SSTab控件中的第一个选项卡,Tab属性值为 0。
例 7.13设计一个具有两个选项卡的窗体,标题分别是时钟控件和单选按钮,
运行结果如图 7.22和图 7.23所示。
图 7.22 时钟选项卡 图 7.23 单选按钮选项卡返回本节第 8章 界面设计本章主要介绍如何设计菜单、对话框,如何响应鼠标与键盘事件以及如何建立多重窗体应用程序。
8.1 菜单
8.2 对话框
8.3 多重窗体与环境应用
8.4 鼠标与键盘
8.1 菜单菜单的基本作用有两个:一是提供人机对话的界面,以便让用户选择应用系统的各种功能;二是管理应用系统,控制各种功能模块的运行。
菜单有两种基本形式,下拉式菜单 和 弹出式菜单 。
8.1.1 菜单编辑器
8.1.2 菜单项的控制
8.1.3 设计下拉式菜单
8.1.4 设计弹出式菜单返回本章
8.1.1 菜单编辑器
Visual Basic 使用“菜单编辑器”设计菜单。
可用下列四种方法打开“菜单编辑器”:
方法 1,选择“工具”菜单中的“菜单编辑器”;
方法 2,使用热键 Ctrl+E;
方法 3,单击工具栏中的“菜单编辑器”按钮;
方法 4,在要建立菜单的窗体上单击右键,将弹出一个菜单。
在其上选择“菜单编辑器,。
打开后的“菜单编辑器”对话框如图 8.1所示:
图 8.1,菜单编辑器”对话框每一个菜单项都是一个控件对象,该控件有且仅有一个
Click事件。菜单项最重要的两个属性是 Caption和 Name。
( 1) Caption 该属性用于设置应用程序菜单上出现的字符,
它与控件的 Caption属性类似。
( 2) Name 该属性用于定义菜单项的控制名,这个属性不会出现在屏幕上,在程序中用该属性引用菜单项。
返回本节
1,创建菜单项创建菜单项的步骤如下:
( 1)在标题栏输入该菜单项的标题;
( 2)在名称栏输入程序代码中用于唯一标识该菜单项的名称
(类似于控件的 Name属性 );
( 3)单击“下一个”按钮或“插入”按钮,建立下一个菜单项;
( 4)单击“确定”按钮,关闭“菜单编辑器”。
菜单操作按钮中的上下箭头可调整菜单项在菜单列表框中的排列位置,左右箭头可调整菜单项的层次。在菜单列表框中,
下级菜单项标题前比上级菜单项多一个,....”标志。
2,分隔菜单项在菜单项很多的菜单上可以使用分隔线将菜单项划分为一些逻辑组。在“菜单编辑器”的标题栏输入一个连字符,-”。
8.1.2 菜单项的控制
1,有效性控制如果清除一个菜单项“有效”复选框前的,√”,即把它的
“有效”属性设置为 False,就可使其失效,运行后该菜单项变为灰色,
2,菜单项标记即菜单项前面加上一个,√”,用以标记当前某个 (或某些 )菜单项状态是“选定”或“未选定”。菜单编辑器对话框中的
“复选”属性为 True时,相应的菜单项前有,√”标记;
3,键盘选择热键 指使用 Alt键和菜单项标题里括号中出现的那个字符来打开菜单。
建立热键的方法是在菜单标题的某个字符前加一个,&”符号。
快捷键 是直接用以执行相应菜单项的操作。
建立快捷键的方法是打开“菜单编辑器”中的快捷键下拉式列表框,选择一个键,则菜单项标题的右边会显示快捷键名称。
返回本节
8.1.3 设计下拉式菜单下拉式菜单位于窗口的顶部。
下面通过 例 8.1说明下拉式菜单的建立过程。
运行结果图 8.2所示(菜单的创建步骤见下页)。
图 8.2 运行结果菜单创建部分步骤:
① 打开 菜单编辑器,在 标题栏 中键入,计算机加、减,(主菜单 1),在名称栏 键入,Calcl” ;
② 单击,下一个,按钮,在 标题栏 中键入,加,(菜单项 1),在 名称栏键入,Add” ;
③ 单击右箭头 ;
④ 打开 快捷键下拉列表,选择,Ctrl+A”作为,加,菜单项的快捷键;
⑤ 单击,下一个,在“标题”栏中键入,减,(菜单项 2),在 名称栏 键入,Min”作为菜单项 (控件 )名称;
⑥ 打开 快捷键下拉列表,选择,Ctrl+B”作为,减,菜单项的快捷键;
⑦ 单击“下一个”按钮。由于要建立的是主菜单项,因此应消除内缩符号。单击左箭头,内缩符号,....”消失,即可建立下一个菜单项。
返回本节
8.1.4设计弹出式菜单弹出式菜单是独立于窗体菜单栏而显示在窗体内的浮动菜单。
1,弹出菜单的设计因为不希望菜单出现在窗口的顶部,所以将菜单的 Visible属性设置为 False,即在“菜单编辑器”内不选中“可见”复选框。
2,显示弹出式菜单使用 PopupMenu方法。使用该方法时,忽略 Visible的设置。
[对象,]PopupMenu 菜单名 [,标志参数 ][,X,Y]
说明:
①,X”,,Y”参数指定弹出菜单显示的位置;
②“标志参数”用于进一步定义弹出菜单的位置和性能。
例 8.2 利用弹出式菜单改变窗体上文字的字体,运行结果如图
8.3所示。
返回本节图 8.3 运行结果
8.2 对话框对话框在应用程序中的使用非常频繁,用于完成数据输入、
输出或执行其它操作。
8.2.1 通用对话框
8.2.2 文件对话框
8.2.3 其他对话框(颜色、字体和打印对话框)
返回本章
8.2.1 通用对话框
Visual Basic提供了一组基于 Windows的标准对话框。分别是 打开 (Open)对话框,另存为 (Save As) 对话框,颜色
(Color)对话框,字体 (Font)对话框,打印机 (Printer)对话框、
帮助 (Help)对话框。
通用对话框,是一种 ActiveX控件,不是标准控件,位于
Microsoft Common Dialog Control 6.0 部件中,必须通过
“工程”菜单中的“部件”菜单项加载。
在设计状态下,窗体上会显示通用对话框控件的图标,其大小不能改变。运行状态一般不会显示通用对话框,直到程序中通过激活而调出所需的对话框后才能显示相应的对话框。
返回本节
8.2.2 文件对话框文件对话框分两种:“打开”对话框和“另存为”对话框。
通用对话框控件使用 ShowOpen方法打开“打开”对话框,
用 ShowSave方法打开“另存为”对话框。
1,对话框标题对话框标题属性( DialogTitle)用于改变对话框标题。
2,返回文件名
FileName属性和 FileTitle属性用于获得用户在对话框中指定的文件名,FileName包含全部路径,该属性用来设置或返回要打开或保存的文件的路径及文件名。 FileTitle用来指定文件对话框中所选择的文件名,不包含文件路径信息。
例 8.3 编写一个应用程序。单击“浏览图片”按钮后,弹出一个标题为“浏览图片”的打开文件对话框,从中选择一个位图文件并单击确定按钮后,并在图形框中显示该图片。运行结果如图 8.4所示。
返回本节图 8.4 运行结果
8.2.3 其它对话框 (“颜色”、“字体”和“打印”对话框 )
创建这三类对话框的步骤如下:
( 1)在窗体中加载通用对话框控件;
( 2)在“属性页”对话框设置属性,属性说明如教材表 8.3—
表 8.5所示。
( 3)使用对话框控件的 ShowColor|ShowFont|ShowPrinter
方法显示颜色对话框,其使用格式如下:
控件名,ShowColor|ShowFont|ShowPrinter
例 8.4 创建一个使用通用对话框控件的应用程序,运行结果如图 8.5所示:
返回本节图 8.5 运行结果
8.3 多重窗体与环境应用多重窗体指的是一个应用程序中有多个并行的普通窗体,
每个窗体都有自己的界面和程序代码,完成不同的功能。
8.3.1 建立多重窗体应用程序
8.3.2 Visual Basic工程结构返回本章
8.3.1 建立多重窗体应用程序
1,添加窗体添加窗体有两种方法:
方法 1,选择“工程” 菜单中的“添加窗体”菜单项;
方法 2,将一个属于其它工程的窗体添加到当前工程中。
2,设置启动对象指定某窗体为启动窗体,应选择“工程”菜单中的“属性”
菜单项,在打开的对话框中进行设置。
3,装入多窗体程序首先选择“文件”菜单中的“打开工程”菜单项,在显示的
“打开工程”对话框的“现存”选项卡,选中工程,就可以把属于该工程的所有文件 (包括,frm文件和,bas文件 )装入内存。
4,窗体的显示与隐藏
( 1) Load语句
Load语句把一个窗体装入内存。其使用格式如下:
Load <窗体名 >
说明:首次用 Load语句将窗体调入内存时,依次触发
Initialize和 Load事件。
( 2) Unload语句
Unload语句与 Load语句的功能相反,它指的是从内存中删除指定的窗体。其使用格式如下:
Unload <窗体名 >
说明:
① Unload的一种常见用法是 Unload Me,即关闭自身窗体。
( 3) Show方法
Show方法显示一个窗体,有加载和显示窗体两种功能。使用格式如下:
[窗体名 ].Show [模式 ]
说明:
① 若模式为 1,表示窗体是“模式型” 。若模式为 0,表示窗体是“非模式型” 。模式的默认值为 0。
② 窗体名缺省的话则为当前窗体。
( 4) Hide方法
Hide方法将窗体暂时隐藏起来,但是并没有将其从内存中删除。其使用格式如下:
[窗体名 ].Hide
说明:窗体名默认时为当前窗体。
( 4) Hide方法
Hide方法用来将窗体暂时隐藏起来,但是并没有将其从内存中删除。其使用格式如下:
[窗体名 ].Hide
说明:窗体名默认时为当前窗体。
5,不同窗体之间的数据访问两个窗体之间访问有下列三种情况:
( 1)一个窗体直接访问另一个窗体上的数据。
格式,另一个窗体名,控件名,属性例如,假定当前窗体为 Form1,可以将 Form2窗体上 Text1文本框中的数据直接赋值给 Form1中的 Text1文本框,语句如下:
Text1.text=Form2.Text1.Text
( 2)一个窗体直接访问在另一个窗体中定义的全局变量。
格式,另一个窗体名,全局变量名
( 3)在模块定义公共变量,实现相互访问。
为了实现窗体间相互访问,一个有效的方法是在模块中定义公共变量,作为交换数据的场所。
例 8.5 编写一应用程序,要求输入某学生六门课程的成绩,计算总分及平均分并显示。主窗体如图 8.6所示。
返回本节图 8.6 运行结果
1,标准模块标准模块又称为全局模块,由全局变量声明、模块层声明和通用过程等几部分组成。
2,窗体模块窗体模块由三部分内容组成,即声明部分、通用过程部分和事件过程。
3,SubMain过程当一个应用程序中含有多个窗体或多个工程时,有时候需要在显示多个窗体之前对一些条件进行初始化,这就需要在启动程序时执行一个特定的过程。在 Visual Basic中,这样的过程又称为启动过程,过程名为 Main。
8.3.2 Visual Basic工程结构也可以在 Sub Main过程中指定其他过程的执行顺序。例如:
Sub Main( )
Do
Load Records( ) '在标准模块中已声明过的 Records过程
GetInput( )
SaveData( )
Loop
End Sub
本例中按顺序调用标准模块中的 3个过程,直到程序结束。
返回本节
8.4 鼠标与键盘
8.4.1 键盘事件
8.4.2 鼠标事件返回本章
8.4.1 键盘事件
1,KeyDown事件和 KeyUp事件
KeyUp事件和 KeyDown事件能检测到 KeyPress事件不能检测到的功能键、编辑键和箭头键。
KeyDown事件是在按下键盘某个键触发;
KeyUp事件则是在放开某个键时发生。
其使用格式如下:
Private Sub Form | 控件名 _KeyDown | KeyUp ([ Index As
Integer,] KeyCode As Integer,Shift As Integer)

End Sub
说明:
① KeyDown | KeyUp事件可用于控件,,Index As Integer”参数含义与 KeyPress相同。
②,KeyCode”参数返回所按键的键值 (ASCII值 )。它是以“键”
为准,而不是以“字符”为准。即大写字母与小写字母使用同一个键,其 KeyCode值相同。而大键盘上的数字键与小键盘上对应的数字键由于不是同一个键,所以它们的 KeyCode值是不一样的。
对于同时具有上档字符和下档字符的键,当发生 KeyDown或
KeyUp事件时,所得到的 KeyCode值是下档字符的 ASCII值。
③ 参数,Shift”返回一个整数值,指示键盘上的 Shift,Ctrl和 Alt
三个功能转换键的按键状态。当按下一个或同时按下多个功能转换键时,系统自动将所按键的状态值传递给 Shift参数。
例 8.6 在窗体上添加一个图片框并插入一幅图像,程序运行时,
每次按 ↑,↓,←,→箭头键,可使图片框在对应方向上移动
20个像素位置;每次按下 Ctrl键的同时再按下 ↑,↓,←,→
箭头键,可使图片框在对应方向上移动 50个像素的位置。运行结果如图 8.7所示。
返回本节图 8.7 运行结果
1,鼠标事件与过程
( 1) MouseDown事件和 MouseUp事件
Private Sub 对象 _MouseDown | MouseUp([ Index As Integer,] _
Button As Integer,Shift As integer,x As single,y As Single)
[过程体]
End Sub
说明:
①,Index As Integer”只用于控件数组;
②,Button”参数返回一个整数 (包括三个取值,1,2,4),表示鼠标的按键状态:
1,(vbLeftButton) 表示按下或松开了鼠标左键;
2,(vbRightButton) 表示按下或松开了鼠标右键;
4,(vbMiddleButton) 表示按下或松开了鼠标中间的键
8.4.2 鼠标事件
③,x”、,y”参数用来返回或设置鼠标光标的当前位置;
例 8.7 在窗体上添加一个文本框。编写程序,让文本框跟随鼠标指针移动,同时在文本框中显示当前鼠标指针所在的位置。运行结果如图 8.8所示。
图 8.8 运行结果例 8.8 用鼠标事件在图片框中画图。要求程序运行后,在图片框中按下鼠标左键且拖拽鼠标则画图,释放鼠标则结束画图,
右击鼠标,清除图片框,运行结果如图 8.9所示。
图 8.9 运行结果
(2) MouseMove事件
MouseMove事件伴随鼠标指针在对象间移动连续不断地产生。
2,对象拖放操作拖动和放下构成了拖放 (DragDrop)操作。
3.与拖放有关的对象的属性
① DragMode属性该属性用于设置或返回拖动对象 (源 )的模式。取值有两个:
1 自动拖动模式。
0 人工 (手动 )拖动模式,默认模式。
在自动拖动模式下,用户可以在任何时候拖动控件。而在手动拖动模式下,需要用户指定何时开始拖动,何时结束拖动。
② DragIcon属性一旦要拖动一个控件,这个控件就变成一个图标,等放下后再恢复成原来的控件。而 DragIcon就是拖放时期显示的图标。
4,与拖放有关的事件
( 1) DragDrop事件当用户将源对象拖到目标对象处之后,松开鼠标按钮时在目标对象上会产生一个 DragDrop事件。
Private Sub<对象名 >_DragDrop(Source As Control,X As_
Single,Y As Single)
[过程体]
End Sub
说明:,对象名”是当前鼠标光标所在位置的目标对象的名称
(不是源对象 );形参,Source”是一个对象变量,保存了当
DrapDrop事件发生时被拖动对象名称属性;,X”、,Y”是拖动动作完成时,松开鼠标按钮、放下对象时鼠标光标的位置。
( 2) DragOver事件当拖动某一对象 (源 )越过一个控件时,被越过的对象 (目标 )产生 DragOver事件。其使用格式如下:
Private Sub <对象名 >_DragOver(Source As Control,X _
As Single,Y As Single,State As Integer)
[过程体]
End Sub
说明:“对象名”是拖动过程中被越过的对象 (目标 )的名称;
,Source”代表被拖动的对象 (源 ),,X”、,Y”是当前鼠标光标位置;,State”参数是一个整数,表示源对象与目标对象之间相对位置关系。
5,与拖放有关的方法
<对象名 >.Drag [值]
说明:对象指被拖对象;“值”为动作参数,有三种取值:
0 (vbCancel):取消指定控件的拖动;
1 (vbBeginDrag):允许开始拖动,是默认值;
2 (vbEndDrag):结束控件的拖动,并发出一个 DragDrop事件。
返回本节第 9章 图形操作图形可以为应用程序的界面增加趣味性,提供可视结构 。
9.1 图形设计基础
9.2 图形控件
9.3 图形方法
9.1 图形设计基础
Visual Basic提供了系统默认坐标系和用户自定义坐标系两种方式的坐标系。
1,默认坐标系默认坐标系 指以容器左上角为坐标原点 (0,0),横向向右为 X
轴正方向,纵向向下为 Y轴的正方向,如 9.1图所示。
图 9.1 默认坐标系
2,用户自定义坐标系要使所画的图产生与数学坐标系相同的效果,就需要重新定义对象的坐标系。
( 1)使用 属性设置 用户自定义坐标系属性 ScaleTop,ScaleLeft的值用于设置容器左上角坐标,
属性的默认值为 0,表示容器左上角为坐标原点。
属性 ScaleWidth,ScaleHeight的值可确定容器坐标系 X轴和 Y轴的正方向和最大坐标值。缺省时它们的值均大于 0。
容器右下角坐标为
(ScaleLeft+ScaleWidth,ScaleTop+ScaleHeight)
例如:
Form1.ScaleTop = 500
Form1.ScaleLeft = -500
Form1.ScaleHeight = -1000
Form1.ScaleWidth = 1000
则窗体 Form1的左上角坐标为
(-500,500),窗体 Form的右下角坐标为 (500,-500),所建立的坐标系如 9.2图所示。
图 9.2 建立的坐标系
( 2)使用 Scale方法设置用户自定义坐标系,其使用格式如下:
[对象,]Scale (x1,y1) - (x2,y2)
说明:
① 对象可以是窗体、图形框或打印机;
② 参数 (x1,y1)决定了坐标系的左上角坐标;
③ (x2,y2)决定坐标系的右下角坐标;
例如,Form1.Scale(-500,500)-(500,-500) 语句可建立上页图中所示的坐标系。
返回本章
9.2 图形控件
9.2.1 图形框和图像框
9.2.2 图形显示方法
9.2.3 使用图形控件返回本章
9.2.1 图形框和图像框的区别图形框与图像框的用法基本相同,但有以下 区别,
( 1)图形框中可以包含其他控件,而其它控件不能“属于”
一个图像框。
( 2)图形框可以通过 Print方法输出文本,并可接受由像素组成的图形,而图像框不能接受用 Print方法输出的信息,也不能用绘图方法在图形框上绘制图形。
( 3)图像框比图形框占用的内存少,显示速度快。在用图形框和图像框都能满足的情况下,应优先考虑使用图像框。
返回本节
9.2.2 图形显示方法
1,设计时添加图形方法 1,在“属性”窗口设置对象的 Picture属性。
在图形框或图像框的“属性”窗口的属性列表中选择 Picture,
在加载图片对话框中可选择图形文件将其加载到控件中。
方法 2,使用剪贴板把图形粘贴到窗体、图形框或图形框中。
例如,把图形从另一个应用程序 (如 WindowsXP的画图 )复制到剪贴板上,然后返回 Visual Basic环境,把它粘贴到窗体、
图形框或图像框中。
2,在程序中添加图形运行时添加图片使用 LoadPicture函数。其使用格式如下:
[对象,]Picture=LoadPicture("[文件名 ]")
说明:当没有指定“文件名”即括号中的参数为空串 (“”)时,
将清除该对象所显示的图形。
3,当前坐标窗体、图形框或打印机的 CurrentX,CurrentY属性给出这些对象在绘图时的当前坐标。
例 9.1 用 Print方法在窗体上随机显示 20个“☆”和 20个“★”,
运行结果如图 9.3所示。
返回本节图 9.3 运行结果
9.2.3 使用图形控件在控件对象中,图形控件可用于在设计时直接绘制界面所需的直线或有形状的 (矩形、圆、椭圆、圆角矩形 )图形。
1,直线控件( Line)
在工具箱中单击控件图标,将鼠标移动到窗体上,从直线起始位置至目标位置拖动鼠标,则在起点和终点之间就产生了一条直线。直线控件的常用属性如下:
( 1) BorderColor属性用于设置直线的颜色,可在程序中使用颜色函数 QBColor函数或 RGB函数实现。
( 2) BorderStyle属性用于设置直线的样式。当 BorderStyle=0时,线型为透明。
( 3) BorderWidth属性用于设置直线的宽度,单位为像素。
( 4) X1,Y1,X2,Y2属性
X1,Y1直线的起点坐标。
X2,Y2直线的终点坐标。
与其它控件不同,直线控件没有任何事件。
2,形状控件( Shape)
形状控件通过以下常用属性来控制绘制图形的外观:
( 1) FillColor属性设置绘制图形的填充色。
( 2) FillStyle属性设置绘制图形的填充模式。
( 3) Shape属性设置绘制图形的形状,如表 9.1所示。
表 9.1 Shape属性设置值符号常量 设置值 说明
VbShapeRectangle 0 (缺省 )画矩形
VbShapeSquare 1 画正方形
VbShapeOval 2 画椭圆
VbShapeCircle 3 画圆
VbShapeRoundedRectangle 4 画圆角矩形
VbShapeRoundedSquare 5 画圆角正方形例 9.2 在窗体上创建控件数组 Shape1(0) ~ Shape1(5),显示
Shape控件的各种形状,并填充不同的图案,运行结果如图
9.4所示。
返回本节图 9.4 运行结果
9.3 使用图形方法绘制图形
9.3.1 Cls方法
9.3.2 Pset方法
9.3.3 Line方法
9.3.4 圆、椭圆、扇形和弧的 Circle方法返回本章
9.3.1 Cls方法
Cls方法用于清除运行时在窗体或图形框中显示的文本或图形。其使用格式如下:
[对象名,]Cls
说明:“对象名”为窗体或图形框的名称,指定在何处绘图,它可以是窗体、图形框。缺省时,是指具有焦点的窗体。
例如:
Picture1.Cls '清除图形框内显示的图形或文本
Cls '清除窗体上显示的文本返回本节
9.3.2 PSet方法
PSet方法可以在窗体或图形框画一个“点”。点的大小由对象的 DrawWidth属性指定。其使用格式如下:
[对象名,]PSet [Step] [(x,y)],[Color]
说明:
①,对象名”指定在哪个对象上绘制点。
例如:
下述语句在当前窗体 Form1和控件 Picture1上设置各种点:
Form1.DrawWidth = 5
Picture1.DrawWidth = 10
PSet (30,60)
Form1.PSet (230,1000)
Picture1.PSet (120,70)
②,Step”表示其后的坐标值使用的是相对偏移。
③,Color” 为该点指定的 RGB 颜色。如果省略,则使用当前的 ForeColor 属性值。
例如:要设置( 50,75)点为亮蓝色,可使用如下语句:
PSet (50,75),RGB(0,0,255)
要“擦除”这一点,只要把其颜色设置为背景色即可,例如:
PSet (50,75),BackColor
返回本节
9.3.3 Line方法
Line方法主要用于在对象上画直线和矩形。
1,直线其使用格式如下:
[对象名 ].Line [[Step](x1,y1)]-[Step](x2,y2)[,Color]
说明:
①,(x2,y2)”是直线的终点坐标,若前面有 Step,则表示
(x2,y2)是相对于 (x1,y1)的偏移量,否则 (x2,y2)是相对于原点的绝对坐标值;
②画直线时,也是使用 DrawWidth属性指定直线的宽度,使用
DrawStyle属性指定边线的样式。
例 9.3 设计一个窗体,并且该窗体上有一个下拉菜单,包括
,Sin(x)”、,Cos(x)”和“清除”三个菜单项,其功能是根据用户的操作分别在屏幕上显示一条 Sin(x)曲线、一条
Cos(x)曲线和清除屏幕图形,如图 9.5所示。
图 9.5 运行结果
2,矩形用 Line方法绘制矩形时比绘制直线时多了两个参数 B和 F。
其使用格式如下:
[对象,] Line[[Step](x1,y1)]-[Step](x2,y2)[,Color],[B[,F]]
说明:
①,Step”的含义与画直线时完全相同;
②,(x1,y1)”可省略,省略时矩形的左上角在当前位置
(CurrentX,CurrentY)处;
③,B”用于说明使用 Line方法绘制矩形;
④,F”用于说明使用绘矩形的颜色来填充矩形。省略时绘制空心矩形。该参数必须与,B”参数一同使用 (无 B时,仅画直线 );
返回本节
9.3.4 圆、椭圆、扇形和弧的 Circle方法
Circle方法可用于在窗体、图形框或打印机上绘制圆、椭圆、弧等图形。
1,圆其使用格式如下:
[对象,]Circle [Step](x,y),Radius[,color]
说明:
①,Step”,指定圆、椭圆或弧的中心坐标 (x,y)是 相对于 当前图形点 (CurrentX,CurrentY);
②,(x,y)”,指定圆、椭圆或弧的中心坐标;
③,Radius”,指定圆、椭圆长轴或弧的半径;
④,Circle”方法使用时可以省略语法中间的某个参数,但不能省略分隔参数的逗号。
例 9.4 设计一个窗体,并在其上面绘制若干个圆,形成图形如图 9.6所示。
图 9.6 运行结果
2,椭圆绘制椭圆仍使用 Circle方法,与画圆相比多一个纵横比参数。其使用格式如下:
[对象,]Circle[Step](x,y),Radius[,color],,,aspect
说明:
①,aspect”参数决定所画椭圆纵轴与横轴的比值。比值大于 1
时,绘制扁形椭圆 (垂直方向大于水平方向 );小于 1时绘制椭圆;等于 1时绘制圆。
② 在 aspect前有三个逗号“,,,”不能省略。
例 9.5 设计一个窗体,在其上绘制图形,运行结果如图 9.7所示。
图 9.7 运行结果
3,弧和扇形弧 可以视为由圆或椭圆的边线中截取的一部分,而 扇形 还要在弧的基础上,从弧的两端再分别画一条到圆心的直线,它是封闭的图形,其使用格式如下:
[对象,]Circle [Step](x,y),radius[,color][start,end][,aspect]
说明:
①,start”指定弧的起始角,,end”指定弧的终止角。它们的单位均是弧度,范围从 0~ 2π。画弧时 start,end都用正值。
从 start开始,逆时针画到 end处结束。
② 如果画扇形,则 start,end都取负值,也是从 start开始,逆时针绘制,到 end结束。
例 9.6 设计一个窗体,根据用户输入的三个班的学生人数,显示各班人数所占比例的饼图,运行结果如图 9.8所示。
返回本节图 9.8 运行结果第 10章 数据文件磁盘中数据集合的处理是通过对文件处理来完成的,文件是
Visual Basic中重要的数据存储方式。
10.1 文件的概念
10.2 文件操作语句及函数
10.3 顺序文件
10.4 随机文件
10.5 文件操作控件
10.1 文件的概念
10.1.1 文件与命名
10.1.2 文件的结构和分类返回本章
10.1.1 文件与命名
1,文件在计算机科学技术中,“文件” 是指记录在外部存储介质上的命令或数据的集合,用来表示输入输出操作的对象。
例如,Word程序或 Excel程序,以及用 Word或 Excel编辑制作的个人文档或表格都是文件,把它存放到磁盘上就是一个磁盘文件,输出到打印机上就是一个打印机文件。广义地说,
任何输入输出的数据都是文件。
2,文件的命名文件通常存放在磁盘上,每个文件都有一个惟一的标识称为文件标识。其使用格式如下:
“盘符” \[路径 (文件夹 )]\ <文件名 >
说明:“文件名”,是指文件本身的名称,它一般由主文件名 (主名 )、
圆点和扩展名三部分组成,其命名规则与 Windows系统文件名命名规则相同。
例如,"E:\backup\readme.txt"
“E:”,表示文件存储在 E盘;
,\backup\”是文件所属的文件夹 (位置或路径 ),
,readme.txt”是文件名,
含义是在 E磁盘上的 backup文件夹下的一个名称为 readme.txt的文件。
返回本节
10.1.2 文件的结构和分类
1,文件的结构通常一个文件由若干条记录组成,每条记录又由若干个字段组成,每个字段又是由若干个字符组成。即文件结构从低到高的层次关系是,字符 →字段 →记录 →文件。
注意,Visual Basic 6.0中一个西文字符和一个汉字都作为一个字符处理。例如,字符串,Visual Basic二级考试”,字符数为 16,占 32个字节。
字段,又称为域。它由若干个字符组成,用来表示一项数据。
记录 是由一组逻辑上相关的字段数据组合而成。
例如,
在学生档案库中,每个学生的 学号、姓名、班级、所在院系等信息在逻辑上就构成了该学生的记录信息,在下面的信息中,每一行就表示了一个学生的记录信息:
学号 姓名 班级 所在院系
0141100 张三 会计 01 管理
0141101 王五 会计 01 管理
2,文件的分类
( 1) 按文件内容分类:程序文件和数据文件。
( 2) 按文件存储方式分类,ASCII文件和二进制文件。
( 3) 按数据访问方式分类,顺序文件、随机文件和二进制文件。
顺序文件:文件的读出和写入的顺序是一致的,需要修改时,必须从头到尾读出顺序找出要修改的地方,修改后再顺序写入。缺点是不能同时读写。
随机文件:随机文件读写通过查找记录号,直接找到所要读写的记录。读取速度快,操作简便。
二进制文件:二进制文件是字节的集合,它允许程序按任何所需的方式组织和访问数据。
返回本节
10.2 文件操作语句及函数
10.2.1 打开与关闭文件
10.2.2 文件指针
10.2.3 相关函数
10.2.4 文件的基本操作返回本章
10.2.1 打开与关闭文件
1,Open语句其使用格式如下:
Open <文件名 > For <读写方式 > [Access <存取类型 >] [<锁定类型
>] As [#] <文件号 > [Len=<记录长度或缓冲区大小 >]
例如,Open "C:\student\wang.dat" For Output As #3
Open "C:\student\wang.dat" For Iutput As #4
说明:
①,文件名”必须有,为字符型,用于指明要打开 (或建立 )的文件名,
其中可以包含路径及文件名,可以是字符串常量,也可以是字符串变量。
②,读写方式”有 Append,Binary,Input,Output或 Random方式。如果未指定方式,则以 Random访问方式打开文件。
③,存取类型”可选。用于说明对打开的文件可以进行的操作,有
Read,Write或 Read Write等操作。
④,锁定类型”可选。用于说明其他进程能够对打开的文件进行的操作,有 Shared,Lock Read,Lock Write和 Lock Read Write操作。
⑤,文件号”是一个整型表达式,为必选项,其值在 1到 511 之间,
在文件操作中,各种语句和函数要通过文件号与该文件相联系。
Len是一个不超过 32767的整数,二进制文件中 Len选项将被忽略。
例如,Open "D:\sj\aaa" For Output As #1
这条语句的功能是打开 D盘下 sj 文件夹下的 aaa文件供写入数据,文件号为 #1。
⑥ 如果要打开的文件事先不存在,系统将先创建一个文件,然后打开它供用户写入数据。
⑦ 在文件关闭以前,各种文件操作均使用 <文件号 >而不使用 <文件名 >表示操作的文件。
2,进行读、写操作通常把内存中的数据传输到相关的外部设备 (如磁盘 )并作为文件存储的操作叫做,写” 数据;而把外部设备中数据文件中的数据传输到内存程序中的操作叫做,读” 数据。
3,Close语句其使用格式如下:
Close[[#] <文件号 >] [,[#] <文件号 > ]…
例如,Close #2,#3,#8
Close '关闭所有打开的文件说明:
① Close语句用来关闭文件,它是打开文件之后进行的操作。格式中的
“文件号”是 Open语句中使用的文件号。
② Close语句中的“文件号”是可选的。如果指定了文件号,则把指定的文件关闭;如果不指定文件号,则把所有打开的文件全部关闭。
③ 除了可以用 Close语句关闭文件外,在程序结束时将自动关闭所有打开的数据文件。
④ Close语句绝不是可有可无的。如果打开的文件或设备正在输出时,执行 Close语句后,不会使输出信息的操作中断。如果不使用 Close语句关闭文件,则可能使某些需要写入的数据不能从内存 (缓冲区 )送入文件中而导致错误。
返回本节
10.2.2 文件指针文件打开以后,自动生成一个隐形的文件指针,文件的读或写从文件指针所指的位置开始。
1,Seek函数其使用格式如下:
Seek(<文件号 >)
类型:长整型。
功能:返回下一个读或写操作的起始位置。
说明,文件号是整数,在 1~ 255之间,由 Open语句分配给文件。
2,Seek语句其使用格式如下:
Seek(文件号 )
例如,Seek(2)
说明:
① Seek语句可以用来设置文件中下一个读或写的位置。;
②对于顺序文件,“位置”是从文件开头到“位置”为止的字节数,即执行下一个操作的地址。文件第一个字节位置是 1。
对于随机文件,“位置”是一个记录号;
注意,当“位置”为 0或负数时,将产生出错信息“错误的记录号”。当 Seek语句中的“位置”在文件尾之后时,对文件的写操作将扩展该文件。
Seek语句和 Seek函数的比较:
对于顺序文件,Seek语句把文件指针移到指定的字节位置,Seek函数则返回有关下次将要读或写的位置信息;对于随机文件,Seek语句只能把文件指针移动到一个记录的开头,而
Seek函数返回的是下一个读写的记录号。
返回本节
10.2.3 相关函数
1,EOF函数功能:判断文件指针是否指向文件末尾。如果指向最后一个字符或数据时,返回 True;否则,返回 False。
格式,EOF(文件号 )
说明,顺序文件内部有一记录指针指向第一个字符。随着记录的读出,记录指针自动向后移动,直到末尾,以表示文件中的数据全部读完。
EOF()函数常用来在循环中测试是否已到文件尾,避免在文件读入时出现“输入超出文件尾”的错误。一般格式为:
Do While Not EOF(1)
[文件读写语句]
Loop
例 10.1设计一个如图 10.1所示的窗体说明顺序文件存储和显示的实现过程。
图 10.1 运行结果
2,Lof函数和 FileLen函数
Lof函数的功能是检测文件大小,返回文件长度。要得到尚未打开文件的大小,需要用 FileLen函数。其使用格式如下:
Lof(文件号 )
FileLen(文件名 )
说明,在 Visual Basic中,文件的基本单位是记录,每个记录的默认长度是 128个字节。因此,对于由 Visual Basic 建立的数据文件,Lof函数返回的将是 128的倍数,不一定是实际的字节数。
Lof函数常用来确定一个随机文件中记录的个数,其一般格式为:
ReCordNumber=LOF(<文件号 >)/RecordLenght
3,Len函数
Len函数的功能是返回字符串表达式中字符个数。其使用格式如下:
Len(字符串表达式 )
例如,Len("type")=4
4,Loc函数
Loc函数的功能是返回打开文件上次读写的位置。对于随机文件,返回记录号;对于二进制文件,返回字节位置。其使用格式如下:
Loc(文件号 )
例如,Loc(3)
注意,Seek函数和 Loc函数的不同,Seek函数返回的是下一个读写位置;而 Loc函数返回的是最近一次读写的位置。
5,Freefile函数
Freefile函数的功能是返回指定范围的文件号。当区间为 0或省略时,返回 1~ 255之间的文件号;区间为 1时,返回 256—
511之间文件号。其使用格式如下:
Freefile(区间号 )
例如,Freefile(0)
返回本节
10.2.4 文件基本操作
1,删除文件( Kill语句)
使用格式,Kill <文件名 >
功能:删除指定的文件
2,拷贝文件( FileCopy语句)
使用格式,FileCopy <源文件名 >,<目标文件名 >
功能:把源文件拷贝到目标文件
3,文件(目录)重命名( Name语句)
使用格式,Name <原文件名 > As <新文件名 >
功能:对文件或目录重命名,也可以用来移动文件。
例 10.2 用 FreeFile函数获取一个文件号。
返回本节
10.3 顺序文件顺序文件的存放次序与读出和写入的顺序是一致的。要修改文件,必须 依次读出,找出需要修改的记录,修改后,再 依次写入 。顺序文件按行组织信息。每行由若干项组成,行的长度不定,由回车换行符号结束。
10.3.1 打开(创建)顺序文件
10.3.2 读数据返回本章
10.3.1 打开(创建)顺序文件三步,打开、写和关闭
1,打开或创建顺序文件可以使用替换式或追加式完成。
( 1)替换式,其使用格式如下:
Open <文件名 > For Output As [#]<文件号 >
功能:打开 (或创建 )一个文件,准备接收写入数据。
( 2)追加式,其使用格式如下:
Open <文件名 > For Append As [#]<文件号 >
功能:打开 (或建立 )一个顺序文件,准备接收向文件中追加数据。
说明:
①在这两种格式的 Open语句中,如果要打开的文件事先不存在,系统将先创建一个文件,然后打开它供用户写入数据;
②用 Output方式打开的文件,文件指针指向文件的开头,所以写入的新数据将替换原文件中的数据;用 Append方式打开文件后,文件指针指向文件的未尾,所以写入的新数据将加于原文件的后面;
例 10.3 用 Print语句建立顺序文件,并演示分号和逗号的作用。
返回本节
10.3.2 读数据读顺序文件也分 3步完成,打开、读和关闭。
1,打开文件
Open <文件名 > FOR Input AS [#]<文件号 >
功能:打开磁盘上已存在的一个顺序文件,并允许从文件中按顺序读取方式将数据读入内存 (输入 )。
说明:
① 语句中的“文件名”必须是已存在的文件名;
② 以,Input”方式打开文件,文件指针位于文件开头。即总是从文件的开头读文件。
例如:打开 App.Path &,\” &,S_file10_3.dat”文件,准备读数据。
Open App.Path & "\" & "S_file10_3.dat" For Input As #2
2,读数据读数据是指将数据从文件中读入到内存。
( 1) Input语句
Input #<文件号 >,<变量表 >
功能:从文件指针所指位置起,读取数据项并依次赋给变量表的变量中。
( 2) Line Input#语句
Line Input #<文件号 >,<字符串变量 >
功能,把 <文件号 >代表的顺序文件中的一整行字符读入 <字符串变量 >中。
例 10.4 用 Line Input语句读例 10.3中创建的顺序文件
S_File10_3.DAT的内容,并输出到文件 Temp2.dat中。
( 3) Input函数使用格式,Input(<字符数 >,#<文件号 >)
类型,字符型功能,从顺序文件中指针所指的位置起,读出一串字符。
例 10.5 设计一个应用程序,能实现文件的读写功能。程序的运行结果如图 10.2所示。
图 10.2 运行结果综上所述,可总结出顺序文件有如下 特点,
① 顺序文件在打开时必须指定对文件的操作方式。即每打开一次文件,只能进行单一的一种操作,要么进行写操作,要么进行读操作,两者不能同时进行;
② 顺序文件在以,Input”方式打开后,总是从文件的开头读文件,即使需要的是最后一行内容也必须如此;
③ 顺序文件在以,Output”方式打开后,总是从文件的开头写入。所以若是一个已经存在的文件,其中的原有内容将被覆盖而丢失。以,Append”方式打开后,则总是从文件的末尾开始写入,无论前面的内容是否需要修改。
返回本节
10.4 随机文件随机文件要求文件中的每条记录的长度都是相同的,记录与记录之间不需要特殊的分隔符号。
10.4.1 打开随机文件
10.4.2 读 /写数据
10.4.3 随机文件中记录的编辑返回本章
10.4.1 打开随机文件
Open <文件名 > FOR RANDOM AS [#]<文件号 > LEN=<记录长度 >
功能:
在磁盘上打开一个名叫 <文件名 >的随机存取文件。
说明:
① 文件打开后,文件指针指向文件头。
② 文件打开后,既可以读也可以写。
关闭随机文件仍使用 Close语句。
返回本节
10.4.2 读 /写数据
1,读数据
Get [#]文件号,[记录号 ],记录变量说明:
① 记录变量的数据类型必须同文件中记录的数据类型一致;
② 该语句是从磁盘文件将一条由记录号指定的记录内容读入记录变量中;
③ 记录号是大于 1的整数,表示对第几条记录进行操作,如果忽略记录号,则表示读出当前记录后的那一条记录。
例如,Get #1,1,student
这条语句的功能是把 1号文件中第一个记录读到 student变量中。
2,写数据
Put [#]文件号,[记录号 ],记录变量说明:
①,#”、“记录号”是可选的。该语句是将一个记录变量的内容写入所打开的磁盘文件中指定的记录位置处;
②要向随机访问打开的文件的末端添加新记录需要把文件号变量的值设置为比文件中的记录数多 1。例如要在一个包含 5个记录的文件中添加一个记录,把 Position设置为 6。然后使用 Put#语句,指定替换的记录位置。
例如,Put #1,3,newdata
返回本节
10.4.3 随机文件中记录的编辑
1,删除记录删除记录的方法是将被删除记录后面的记录位置向前移动,将被删记录覆盖掉,并将总记录数减 1。
例如:要删除记录号为 N的某个记录,可用如下语句,
'recordnum为文件中记录的个数
i=N
DO While i<=recordnum
Get #1,i+1,recvar
Put #,i,recvar
i=i+1
Loop
'将第 i个记录即最后一个记录清空
recordnum=recordnum-1
End Sub
2,清除随机访问文件中删除的记录清除随机访问文件中删除的记录的步骤如下:
( 1) 创建一个新文件;
( 2) 把有用的所有记录从原文件复制到新文件;
( 3) 关闭原文件并用 Kill语句删除它;
( 4) 使用 Name语句以原文件的名字重新命名新文件。
注意,随机文件只需指出记录号,即可直接读出该记录的内容。
第一条记录号,recHome=1
最后一条记录号,Reclast=Lof(1)/Len(记录型变量 )
当前记录号,recNow=Loc(1)
下一条记录号,Recnext=recNow+1
上一条记录号,Recbefor=recnow-1
例 10.6 创建一个应用程序,要求实现打开或建立文件,显示文件中的记录,添加记录三个功能,运行结果如下图 10.3所示。
返回本节图 10.3 运行结果
10.5 文件操作控件
10.5.1 驱动器列表框和目录列表框
10.5.2 文件列表框返回本章
10.5.1 驱动器列表框和目录列表框驱动器列表框 目录列表框
1,驱动器列表框驱动器列表框除具有列表框的一般属性,还有 Drive属性。
DriveX.Drive [=<驱动器名 >]
功能:设置或返回所选择的驱动器名。
单击列表框中某个驱动器图标,则系统自动把该驱动器名赋给 Drive属性。
驱动器列表框的最主要的事件是 Change事件。每次改变
Drive属性值时,都将引发驱动器列表框的 Change事件。
2,目录列表框目录列表框除具有列表框的一般属性,其最主要的属性是
Path属性。 DirX,Path [=<当前目录 >]
功能:设置或返回默认文件夹,即当前工作目录。
用鼠标双击目录列表框中的一个图标,这样表示该图标绝对路径的字符串就被赋值给 Path属性。
返回本节
10.5.2 文件列表框
1,Path属性其使用格式如下,FileX.Path [=路径 ]
说明:
① 在设计状态下由系统设置为当前驱动器的当前路径,不可改变;在运行状态下可以像一个字符串变量那样被访问和使用;
② 文件列表框中所显示的文件是 Path属性值所代表的路径中的文件,当 Path属性被改变时所显示的文件也随之改变;
例如:
Private Sub Dri1_Change()
File1.Path= Dir1.Path
End Sub
例 10.7创建应用程序如图 10.4所示,实现存取顺序文件的功能。
返回本节图 10.4 运行结果