VB讲义

更新时间:2024-04-13 23:21:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Visual Basic实用教程

第一章 Visual Basic简介

作为以编程的方式解决问题,实现算法,选择一种易于接受的、实用的高级语言,Visual Basic无疑是较理想的工具。

学习程序设计,不仅要掌握语言本身的语法,更要学会编程的思想、学会算法的设计。

1.1 Visual Basic的发展过程

BASIC,英文全称Beginner?s All-purpose Symbolic Instruction Code,意为初学者通用符号指令代码。

由最初的基于DOS模式下面向过程的计算机高级语言,BASIC已发展成为基于GUI(Graphic User Interface)的Visual Basic程序设计语言,现在的较高版本是2002年微软推出的VB.NET,它融合了Microsoft Visual Studio.Net技术。

Visual Basic是一种基于BASIC的可视化、面向对象和采用事件驱动方式的结构化程序设计语言。

本书以Visual Basic 6.0企业版为实验环境,是微软于1998年推出的,它与其他程序开发设计语言(Visual C++、Visual FoxPro、Visual J++)及开发环境打包组成Microsoft Visual Studio 98开发工具套件。

VB6.0除企业版外,还有学习版和专业版,其中企业版是功能最全的版本。

1.2 Visual Basic的特点

1. 可视化的编程工具

封装Windows风格图形界面的复杂性,界面的设计通过在窗口中添加“控件”,并设置其属性和布局即可完成,无须编码。

2. 结构化的程序设计语言和面向对象的程序设计思想

VB作为结构化的程序设计语言,具有丰富的数据类型和内部函数,其语句简单易懂。同时,支持面向对象的程序设计方法(OOP)。 3. 事件驱动的编程机制

VB的每一个对象能够捕获和响应事件,如CommandButton的Click事件,通过编写事件过程的代码,规定事件触发时应完成的特定功能。

4. 数据库系统的访问

具有很强的数据库管理功能,通过数据控件或ADO对象可实现不同类型数据源的访问。 5. 联机帮助

帮助系统,MSDN(Microsoft Developer Network Library)。 数据交换技术,DDE(Dynamic Data Exchange),实现应用程序之间数据的动态链接。 对象的链接与嵌入,OLE(Object Linking and Embedding)。 动态链接库,DLL(Dynamic Linking Library),实现如C++开发的程序在VB中的应用,

也可直接建立相应的ActiveX组件。

6. VB.NET的主要特性

引入严格的面向对象特性,提供ADO.NET数据库访问技术,可直接编辑ASP.NET开发Web应用程序。

1.3 运行环境、安装、启动与退出

1. 运行环境

从软件环境和硬件环境配置两方面考虑。 2. VB系统的安装

是否安装MSDN、是否需要注册、序列号。

3. VB的启动和退出 (1) 启动:“新建工程”对话框的使用,集成环境的介绍在下一节。 (2) 退出

1.4 VB系统的集成开发环境(IDE)

该部分内容通过演示,首先明确VB中的相关概念,包括工程(标准EXE)、窗体窗口、资源管理器、属性窗口、窗体布局窗口、对象浏览器、工具箱、数据视图窗口、可视化部件管理器等,简要描述其用途。

2. 标题栏、菜单栏、工具栏

注意VB的三个状态,即设计状态、运行状态、中断状态

3. 窗体窗口

用来设计应用程序的界面。新建工程,会自动打开一个窗体,可使用“工具箱”向窗体添加控件,并做适当调整,以完成界面设计。注:窗体上的网格线,仅作位置或大小的标识之用,运行时消失。

以在窗体(Form)上添加一命令按钮(CommandButton)为例演示。

4. 工具箱与添加控件

使用工具箱在窗体上添加控件的方法:

(1) 在工具箱上双击控件图标

(2) 在工具箱上鼠标单击,然后再窗体上拖动鼠标

工具箱除包含已有的“通用(General)”控件以外,也可通过“工程”菜单的“部件”菜单项添加其他的控件,如数据访问控件-ADODC等。

5. 属性窗口

用来描述VB窗体和控件(对象)特征的窗口,决定对象的外观、特点、功能等。 属性窗口是在设计状态下改变或设置对象属性的一种方式,一般针对不需要在运行进行改变的属性。若要求在运行状态下改变属性的值,一般通过程序代码的方式来完成。

属性窗口的组成,包括标题栏、对象下拉列表、属性名/属性值、属性简短说明。具体内容进行演示说明。

6. 工程资源管理窗口 VB的应用程序称作“工程”,对应的文件扩展名为.vbp,包含应用程序所需的文件清单。对工程中文件的管理,使用“工程资源管理窗口”来完成,类似于Windows资源管理器。其中包含的文件分6类,分别是窗体文件(.frm)、类模块文件(.cls)、标准模块文件(.bas)、

资源文件(.res)、工程文件(.vbp)、工程组文件(.vbg)。

工程资源管理窗口中显示的模块名称与实际存储在磁盘上的文件可以相同,也可以不同,二者具有不同的含义和用途。模块名是在程序中相互引用时使用的标识符;而文件名是存储在磁盘上的文件标识符。如窗体的名称为Form1,而存盘时的文件名可为MyForm1.frm,在程序代码中对窗体的引用应使用Form1。

工程资源管理窗口包含“查看代码”、“查看对象”、“切换文件夹”三个按钮。 7. 代码窗口

代码窗口用于编辑应用程序的源代码,也称代码编辑器。 打开代码窗口的方法:(1)编辑状态双击窗体的任何位置;(2)右键单击,从快捷菜单执行“查看代码”;(3)单击工程资源管理窗口的“查看代码”;(4)执行“视图”菜单的“代码窗口”。

代码窗口包括三部分,如下“

(1) 对象列表框:查看并选择当前窗体及窗体上所有对象。其中“通用”表示与特定对象无关,一般用于定义模块级变量或自定义过程的声明。注:窗体的对象名总是Form。 (2) 事件列表框:列出当前所选对象的所有事件名,其中在对象列表中选定“通用”时,事件列表中为“声明”,可定义模块级变量。

(3) 代码编辑区:输入、编辑事件过程的程序代码。

事件过程的一般形式,在VB环境中演示说明。

8. 立即窗口

在立即窗口中使用Print或?语句可直接查看表达式的值,无须编程。但循环、分支、变量类型说明等不能在立即窗口中执行。

要打开立即窗口,可执行“视图”菜单的“立即窗口”命令。

9. 窗体布局窗口

用于观察应用程序中各窗体运行时在屏幕上的初始位置。在窗体布局窗口中,可右键单击后使用快捷菜单设置窗体的“启动位置”。

1.5 对象的有关概念

1.5.1 对象和类

1. 对象和类的概念:现实世界中客观存在的实体抽象为对象,而具有相同结构、操作,并遵守相同规则的一组对象聚合为类。对象可看做类的实例,类是创建对象实例的模板,是同种对象的集合与抽象。同一类中的不同实例有一些共同的性质和功能。

2. VB中使用的类和对象的特点:VB作为面向对象的程序设计语言,主要建立在类和对象的基础上。大多数类和对象由系统定义,并封装了类的属性、方法和事件,用户无须关心类的内部实现,可直接使用。最常用的方式就是通过“工具箱”提供的控件类,直接在窗体上创建控件类的实例。

通过举例简单演示说明。

1.5.2 对象的属性、事件、方法

1. 对象的属性

属性是对象所具有的特征、状态或行为。不同类的实例对象具有不同的属性,同类的对象其属性值可不同,从而使对象具有不同的外观和功能。

属性可看作是数据的集合,改变有关的数据就是改变属性;对象就是用不同的属性值来描述其各自不同的特征。

举例:如TextBox对象具有Text属性,而CommandButton对象具有Caption属性;CommandButton1的Caption属性值为“确定”,而CommandButton2的Caption属性值为“取消”。

2. 对象的事件、事件过程及事件响应

(1) 事件:发生在对象上的事情或动作,也称“触发”。在VB中,事件是预先定义好的、能够被对象识别的动作。不同的对象具有不同的事件,利用系统提供的类创建的对象其事件是固定的,用户不能建立新的事件。

(2) 事件过程:在代码编辑区编写的、当事件被触发时能够被执行的相应程序代码。如:

Private Sub Command1_Click()

Command1.Caption = \确 定\

End Sub

(3) 事件响应:事件被触发时,将执行相应的事件过程的能力。

注:按时间发生的顺序而不是固定的顺序运行程序的工作模式,即事件驱动方式。 3. 对象的方法

面向对象的程序设计语言中,由系统预定义的一类特殊的事件过程,编程者可直接调用而无须响应某个事件,即所谓对象的方法。如Form﹒Show、Print等。

1.5.3 编程步骤及示例

用VB编程的一般步骤:

① 创建用户界面------在窗体上添加控件、菜单等 ② 设置对象(控件)属性 ③ 编写事件过程

④ 保存程序,调试、运行程序。

示例1.1:会动的标语

1.6 使用帮助

1. 在线帮助

2. Visual Basic 6.0帮助主题 3. 使用帮助

第二章 Visual Basic入门

教学目的及要求:

介绍窗体对象、最常用的基本控件,包括命令按钮、标签、文本框及它们的

常用属性、事件和方法 ,使学生对VB程序设计过程有一个大致的了解。 重点与难点:

1、 熟练掌握窗体的建立,窗体的常用属性、事件和方法。 2、 熟练掌握VB程序的保存、打开和关闭。

3、 熟练掌握命令按钮、标签、文本框的创建和应用。 4、 了解焦点的意义及其设定方法。 5、 了解多窗体的存取、移去与添加。

6、 难点是对GotFocus事件、 LostFocus事件、 SetFocus方法的理解,属性设置的两种方式。 主要外语词汇:

Caption 、LoadPicture、 Click、 WordWrap、 Show、 Hide

2.1 建立窗体对象

窗体及放置在窗体上的控件共同组成应用程序的界面。窗体是容器对象。

2.1.1 窗体对象的创建与操作

创建“标准EXE”工程,即自动包含一个窗体。

1. 窗体常用属性

见教材P18页表2-1,明确常用属性的含义并有所记忆,结合在“属性窗口”中设置属性值的方式做简单演示。

2. 设置属性

(1) 在属性窗口中设置属性值

在程序运行时固定不变的属性值,可在设计状态下利用属性窗口进行设置。 (2) 用程序代码改变属性值

格式为:[对象名].属性名=属性值 其中,[]表明是可选项,=是赋值号

举例说明以代码方式设置属性值,强调在事件过程中完成代码的编写。 1) Caption属性

在Form_Click()事件过程中演示,Form1.Caption = \演示\2) 背景图片的加载

属性窗口加载图片做演示

[对象名] .Picture = LoadPicture(\图片文件名\ 其中图片文件名如C:\\PIC\\sunset.jpg,应包括路径。

[对象名] .Picture = LoadPicture(\,或把双引号去掉,作用是卸载图片。

3) 颜色的设置

包括前景色.ForeColor和背景色.BackColor,可通过属性窗口设置;若以代码方式设置,有以下4种方法:

a) 使用RGB函数

RGB(红,绿,蓝),3个参数的取值均为0~255之间的整数 b) 使用QBColor函数 QBColor(颜色码),颜色码的取值为0~15之间的整数。 c) Color常数,如VbBlack d) 8位16进制数

格式为&H&,中间为8位16进制数。 具体常用颜色码与颜色常数,请参阅P21页表2-2。 将窗体的背景颜色设置为蓝色,代码示例如下: Form1.BackColor = RGB(0, 0, 255) Form1.BackColor = QBColor(9) Form1.BackColor = vbBlue Form1.BackColor = &HFF0000

4) 用Icon设置窗体的图标

使用属性窗口或以代码方式设置窗体的图标。

若以代码方式设置图标,应使用LoadPicture函数。能够加载的图片文件的类型为.ico文件,示例如下:

Form1.Icon = LoadPicture(\

2.1.2 窗体对象的事件和方法

1. 事件

事件是VB预先定义的、能够被对象识别的动作。一旦事件被触发,将执行设计好的“事件过程”,作出不同的响应。

VB窗体的事件主要有:Click、DblClick、Load、Unload、Active、Deactivate、Initialize、Terminate、Resize、Paint等。强调事件发生的条件、顺序,可以MsgBox()函数在不同的事件中写入代码加以验证。

2. 方法

VB提供的每一个方法能够完成某一特定的功能,只能按照预先规定的形式进行调用,格式如下:

[对象].方法 [参数列表]

窗体常用的方法有Print、Cls、Move、Show等,分别介绍如下:

(1) Print方法

格式为:[对象.]Print [表达式1][,|;][表达式2][,|;]……[表达式n]

1) 对象可以是窗体Form、图片框PictureBox、打印机Printer、立即窗口Debug。 2) Print方法兼有运算和输出双重功能,先计算表达式的值,然后再输出。

3) 若同时输出多个表达式的值,中间用逗号(,)或分号(;)分隔,二者的区别是:前者按标准格式显示(14个字符位置为一个区段),后者按紧凑格式输出。

4) 在输入Print关键字时,可用“?”代替,回车后,自动变为Print. 5) 输出字体类型可通过FontName属性设置,语法为:

[窗体.][控件.] | [Printer.] FontName [=“字体类型”] 6) 输出字体大小可通过FontSize设置,语法为: [窗体.][控件.] | [Printer.] FontSize [=点数]

7) 粗体字、斜体字、加删除线、加下划线分别使用属性FontBold、FontItalic、

FontStrikethru、FontUnderline设置,其属性值均为Boolean类型。

属性一旦设置,将一直起作用,不会自动撤销; (2) Cls方法

将Form、PictureBox对象上用Print显示的内容清除

(3) Move方法

[对象.]Move左边距离[,上边距离[,宽度][,高度]]]

改变对象在屏幕或窗体上的位置,对象是除时钟、菜单以外的所有控件。以Twip(缇)为单位,相当于磅的1/20,英寸的1/1440,1厘米有567 缇。

2.2 程序的保存、打开与运行

2.2.1 程序的保存

保存主要有两类文件,即窗体(.frm)文件、工程(.vbp)文件,同时自动生成和维护.vbw和.scc文件。

2.2.2 程序的打开

打开工程文件,即自动打开窗体文件等。

2.2.3 程序的运行

1. 解释执行

方法是:工具栏“启动”按钮、“运行”菜单的“启动”、F5键

特点:每次执行程序,必须对每条语句边解释边执行,运行速度较慢。 2. 编译执行 方法是:“运行”菜单的“全编译执行”、Ctrl+F5键

特点:读取VB程序的语句,对这些语句进行编译,转换为微处理器的指令,然后执行转换以后的指令,不必每次都逐句解释,速度较快。

3. 生成可执行文件

方法是:执行“文件”菜单的“生成工程.EXE”

特点:一旦生成可执行文件,可在不启动VB环境的情况下,直接在Windows环境下执行VB的程序。但需注意,该方式需要VB的相关系统文件(如.ocx、.dll等),因此需要安装VB系统。

2.3 创建基本控件

窗体和控件都是VB的对象,利用工具箱在窗体上添加控件,完成基本界面的设置。

2.3.1 控件对象的建立和编辑

1. 建立对象

在窗体上添加控件对象的方法:

(1) 在工具箱上单击控件图标,然后在窗体上拖动鼠标。

(2) 双击工具箱上的控件图标,则以默认的大小和位置在窗体上添加控件对象。 2. 对象的编辑

在设计状态下,选中控件对象后,利用鼠标拖动(主要是大小、位置)或利用属性窗口完成对象的编辑。

(1) 同时选中多个对象:按住Ctrl或Shift键的同时利用鼠标单击。 (2) 控件对象大小的调整:1)鼠标拖动尺寸柄

2) Shift+方向键

3)设置Width、Height属性

(3) 控件对象位置的调整:1)鼠标拖动控件

2)Ctrl+方向键

3)设置Top、Left属性

(4) 对象的删除

在选定控件对象后,可利用“编辑”菜单或快捷菜单或直接按Delete键进行删除。 3. 对象的命名

对象的命名是为了在程序中能够引用对象,要遵守一定的规则,做到见名知义。一般控件对象的名称前要能标识控件对象的类型,如标签控件前缀为lbl、文本框控件前缀为txt、命令按钮为cmd等,具体约定见P28页表2-3,通过窗体或控件的Name属性设置。

2.3.2 CommandButton(命令按钮)控件

1. CommandButton控件常用属性

包括Name、Caption、Enabled、Visible、Default、Cancel、Style、Picture、ToolTipText等属性,具体含义见P29页表2-4。

(1) Caption:快捷键的创建方法,字母前加&,运行时该字母带下划线,称为快捷键,可直接按Alt+字母,等价于单击该按钮。

(2) Enabled:可用不可用,默认值为True (3) Visible:可见不可见,默认值为True

(4) Default:设置为缺省按钮,在其他控件(如文本框)获得输入焦点时,按“Enter”键,等价于单击该按钮。

(5) Cancel:设置为缺省取消按钮,按“Esc”键,等价于单击该按钮。 (6) Style和Picture常结合使用:先设置Style为1,再设置Picture属性。 2. CommandButton控件常用事件

以Click事件为例,无DblClick事件。

2.3.3 Label(标签)控件

Label控件多用于在窗体上显示文字,不能输入和修改。

1. Label控件属性

包括Name、Caption、BorderStyle、BackColor、BackStyle、ForeColor、Font、Alignment、AutoSize等,见P30页表2-5。

注意With …End With开语句的使用,格式如下: With <对象名> .<属性名>=<属性值> …

End With

例:With Label1

. FontName=“隶书” . FontSize=24 . FontBold=True

. FontUnderline=True . FontStrikethru=True End With

2. Label控件事件

如Click、DblClick等,一般不用。

2.3.4 TextBox(文本框)控件

可以在窗体上显示、输入和编辑文本的控件。

1. TextBox控件属性

包括Name、MultiLine、ScrollBars、MaxLength、Locked、Enabled、PassWordChar等,见P31页表2-6。

(1) Text:

(2) MultiLine和ScrollBars常结合使用:

先设置MultiLine为True,再设置ScrollBars属性。这两个属性设计时可用,而运行时为只读。

(3) MaxLength和PassWordChar常结合使用:

先设置MaxLength的值,再设置PassWordChar属性。 (4) 只能在运行期间设置的属性值:在属性窗口中不可见

①SelLength:文本框中选中的字符个数。

②SelStart:定义当前选择的文本的起始字符位置。 ③SelText:选中的文本内容。 2. TextBox控件事件

(1) Change事件,默认事件 文本框内容变化时发生该事件。 (2) GotFocus、LostFocus事件 在得到或失去焦点时发生。 (3) KeyPress事件

原型为:

Private Sub Text1_KeyPress(KeyAscii As Integer) '在按下并释放键盘的一个按键时发生

'可捕获键盘按键的ASCII值,并做相应处理 End Sub

例2-2的演示

3. SetFocus方法

把光标移动到指定的控件内。格式为:[对象.]SetFocus,其中的对象可为TextBox、CheckBox、CommandButton、ListBox等。

小问题:为什么不能直接在Form的Load事件中设置焦点到TextBox中,即调用TextBox的SetFocus方法?有什么解决的办法?

参考解决办法:

a) Load事件中先Show,然后再SetFocus b) 在Activate事件中调用SetFocus 例2-3演示

小结:创建应用程序的步骤

1、创建用户界面 2、设置对象属性 3、编写事件过程 4、保存文件与运行调试程序 5、生成可执行的EXE文件

2.4 多窗体操作

VB中,一个工程可以包含多个窗体,且可以在窗体之间切换。

2.4.1 添加窗体

1. 添加窗体

(1)工具栏上的“添加窗体”按钮、(2)“工程”菜单的“添加窗体”、(3)“工程资源管理器”窗口使用快捷菜单的添加窗体。 2. 有关的语句和方法

(1) Load语句

格式为:Load <窗体名>,作用是将指定的窗体加载到内存,但窗体并不显示,此时可引用窗体上的控件。

(2) UnLoad语句

格式为:UnLoad <窗体名>,作用是将指定的窗体从内存释放掉;也可使用UnLoad Me将当前窗体释放掉。

(3) Show方法

格式为:[窗体名.]Show,将指定的窗体对象加载到内存并显示。

(4) Hide方法

格式为:[窗体名.]Hide,将指定的窗体隐藏,即不在屏幕上显示,但仍存在内存中。 示例2-4。

2.4.2 多窗体的操作

1. 窗体切换

在设计状态下,通过双击打开窗体进行编辑;在运行时可通过如Show方法的调用进行显示,显示后窗体的切换同Windows操作。

2. 设置启动对象

默认情况下,应用程序中的第一个窗体被指定为启动窗体。

(1) 工程 -> 工程1属性 -> “通用”选项 -> 启动对象,可为Form或Sub Main过程 (2) 工程资源管理窗口 ->工程(右键)-> 工程1属性 -> 通用选项 -> 启动对象

2.4.3 多窗体文件的存取、移去和添加

1. 工程中的多个窗体,每个都单独保存为窗体文件。 2. 打开工程文件,会自动打开包含的窗体文件。 3. 工程中包含的窗体可添加,也可移去。

2.5 焦点与Tab顺序

2.5.1 焦点

焦点,指对象接受鼠标或键盘输入的能力。控件的焦点是本节讨论的重点。

1. 窗体的焦点---活动窗体

工程中可包含多个窗体,当前获得焦点的窗体即为活动窗体。除使用编程的方式(如调用Show方法等)激活窗体获得焦点外,其他的操作方式同Windows。

2. 控件的焦点

(1) 说明

1) 窗体包含的多个控件中,同一时刻能够拥有焦点的控件只有一个。

2) 不是所有的控件都具有接受焦点的能力,如Label控件就没有焦点。

3) 只有控件的Enabled、Visible属性设置为True时,控件才可以接受焦点。 (2) 控件获得焦点的方法

1) 按键盘的Tab键。 2) 用快捷键---访问键

3) 运行时,单击控件

4) 在程序中调用SetFocus方法 (3) 控件失去焦点的方法

1) Tab键

2) 单击另一控件对象

3) 对另一控件对象调用SetFocus方法

2.5.2 Tab顺序

Tab顺序即用户按Tab键时焦点在窗体上各控件之间移动的顺序。

(1) 添加控件的顺序决定Tab顺序,控件的Tab顺序默认从0开始编号。

(2) 要改变控件的Tab顺序,可通过设置控件的TabIndex属性。注:具有TabIndex属性的控件,若不能获得焦点、控件无效、控件不可见或控件的TabStop属性设置为False时,按Tab都将跳过这些控件。

(3) 要使窗体的某个控件在运行时首先获得焦点,可将控件的TabIndex属性值设置为0或调用控件的SetFocus方法。

第三章 Visual Basic语言基础

教学目的及要求:

使学生掌握程序的基本元素,即数据的类型、数据的存在形式(常量、变量等)、数据的处理方式(函数、表达式等),掌握VB程序设计语言的语法规则。 重点与难点:

1、熟练掌握数据的类型,符号常量和变量的声明。 2、熟练掌握变量的作用域。

3、熟练掌握不同数据类型合法表达式的构成。 4、熟练掌握各种表达式的优先级及运算 5、难点是变量的作用域。 主要外语词汇:

private、 public、 static、 option explicit

3.1 字符集、关键字、标识符

3.1.1 字符集

包括数字、英文字母(不区分大小写)、特殊字符三类,中文版VB可识别汉字。

3.1.2 关键字

VB系统预定义的保留字,有固定的含义,不能作为其他用途。如Private、Print、Integer、Dim等。

3.1.3 标识符

VB中变量、常量、控件、自定义过程、自定义函数等的名称称为标识符,由用户自定义,定义时须遵守以下规则:

(1) 以字母(或汉字)开头,后跟字母、汉字、数字、下划线等,要见名知义,如变量的名称nAge、标签控件的名称lblName等。

(2) 不能使用VB预定义的关键字作为标识符。 (3) 标识符长度不能超过255个字符。

3.2 基本数据类型

数据类型决定数据的取值范围、能够参与的运算和数据的存储形式。包括:

VB的标准数据类型:数值型、字符型、逻辑型、日期/时间型、可变型和对象型 用户自定义的数据类型

选择合适的数据类型,可优化代码的速度和占用内存资源的大小。一般情况下,同类型数据可相互运算,否则出错。

VB标准数据类型见表3-1,可了解不同类型数据的相应取值范围、占用存储空间的大小等信息。

3.2.1 数值型

包括整型、实型(浮点型)、货币型三类,如下: 1. 整型(定点数):

(1) 基本整型Integer:有符号整数,以%结尾(可省略),2个字节,-2-15 ~ 215-1 (2) 长整型Long:有符号整数,以&结尾,4个字节,-2-31 ~ 231-1 ①十进制 ②八进制:以&或&O开头 ③十六进制:以&H开头 没有二进制的形式。

例:Form1.BackColor = &H00FF0000& 系统在输出时,一律转化为十进制的形式。 例:Private Sub Command1_Click( )

Dim a As Integer a=&O101 Print a

End Sub 65

(3) 字节型Byte:无符号整数,1个字节,0 ~ 255,ASCII码 2. 实型:有符号数

(1) 单精度Single:以!结尾(可省略),4个字节,有效位数7位 形式:①小数形式! ②尾数E阶数

(2) 双精度Double:以# 结尾,8个字节,有效位数15位 形式:①小数形式# ②尾数D阶数 要求:①字母E(或D)之前和之后必须有数字 ②字母E(或D)之后的指数必须为整数 3. 货币型Currency:定点数

小数位数4位,整数位数15位,以@结尾。

3.2.2 字符型

以$结尾,在定义变量时使用,常量必须用一对西文双引号括起来。 1. 变长字符串:String

2. 定长字符串:String *size

不足部分用空格填满,超出部分被截去。 例:Form1.Caption = “窗口一”

3.2.3 逻辑型(或布尔型)

2个字节,只有两个值:True和False。 例:Text1.FontBold = True

逻辑型与数值型可以互相转换:

(1) 逻辑型 -> 数值型:True -> -1,False -> 0 (2) 数值型 -> 逻辑型:非0 -> True,0 -> False 例:Private Sub Command1_Click( )

FontItalic = 1 Print True + 5 End Sub

3.2.4 日期(时间)型

必须用一对#号括起来,如#January 1,2008# ,#2007-11-03 08:30:10 PM#等,年月日之间的分隔符可用空格、逗号、斜杠(/)、连字符(-),时分秒的分隔符为冒号(:)。

1. 系统自动将日期转换为“月/日/年”的形式,而输出均为“年-月-日”的形式。 2. 系统自动将时间转换为12小时制(AM/PM)的形式,而输出均为24小时制的形式。

例:Private Sub Command1_Click( )

Dim a As Date,b As Date,c As Date

a=# 3/1/2002 #

b=# 1:00:00 PM #

c=#3/1/2002 1:00:00 PM #

Print a,b,c

End Sub

执行结果:2002-3-1 13:00:00 2002-3-1 13:00:00

3. 不能识别含有汉字的日期/时间文字

3.2.5 可变类型

关键字为Variant,可以接受VB的任何数据类型,一般情况下尽量不用,以避免类型转换出错。

3.2.6 对象型

使用VB的对象时使用的一种类型,使用时一般形式为: Dim obj As Object Set obj=对象句柄 小结:

数据类型 整型 长整型 单精度 双精度 货币型 变长字符串 定长字符串 注:&和#分别有多种用途。

关键字 Integer Long Single Double Currency String String *size 类型符 %(可省略) & !(可省略) # @ $ $ 3.3 常量

在程序运行时不能改变其值的量,分为一般常量和符号常量两种。

3.3.1 一般常量

按照不同的数据类型,采用不同的表示形式。可与3.2节内容一块讲解。 1. 数值常量:类型符的使用

在使用Integer或Single类型常量时,可以省略相应的类型符。 2. 字符常量(字符串常量):一对西文双引号 3. 逻辑常量:True和False 4. 日期常量:一对#号

3.3.2 符号常量

原则:必须先定义后使用,只能赋一次值。

目的:为修改或输入的方便,提供符号常量,但在程序中不允许对定义的符号常量重新赋值。

定义符号常量的一般形式为:

[Private | Public] Const 符号常量名 [As 类型]=表达式

从定义的位置开始生效,其中使用的关键字不同,符号常量的作用范围也有所区别。

3.4 变量

程序运行时可以改变其值的量,占用内存的存储单元临时存储数据,在程序中通过变量名来引用变量。

变量的名称遵循标记符的命名规则,一般遵循“先定义,后使用”的原则。

3.4.1 变量的声明

变量要有相应的数据类型,声明时按类型为其分配相应的存储单元。 1. 显式声明变量

格式为:

声明符 变量名1 [As 类型][,变量名2 [As 类型]] [,变量名3 [As 类型]]…… 说明:

(1) 一个声明语句可同时声明多个变量。

(2) 声明符可为Dim、Private、Static、Public等,决定变量的作用域。 (3) 类型可为VB的基本数据类型,也可为自定义或枚举类型。

(4) 可使用表3-1中的类型符声明变量的类型,如Dim x%,y!,z$,a&,b#,c@,d,分别定义变量x、y、z、a、b、c、d的类型为Integer、Single、String、Long、Double、Currency、Variant类型。

(5) Dim x,y,z As Integer这样的语句,只有z定义为Integer类型,x,y均为Variant类型。 (6) 声明变量时,应注意选择合适的数据类型。 (7) 统提供的默认初始值:

1)数值型:0 2)货币型:0 3)字符型:空字符串 4)逻辑型:False 5)日期型:0:00:00 6)可变型:Empty 7)对象型:Nothing

2. 隐式声明变量

没有声明,直接如通过赋值语句使用的变量为隐式声明的变量。 (1) 被默认为可变类型Variant。 (2) 只能被当作是过程级变量,如不能在窗体模块的声明部分赋值 注:采用隐式变量声明,不利于查错和纠错。

3. 设置强制声明变量

(1) 手动设置:在代码中通过Option Explicit强制声明,在“通用”-> “声明”中 对已打开的当前工程有效。

(2) 自动设置:“工具”菜单 -> 选项 -> “编辑器”标签 -> “要求变量声明”设置 只对新建的工程有效。

3.4.2 变量的作用域

变量的作用域,即变量能够使用的有效范围,采用的“声明符”不同,变量声明的位置不同,可决定变量的作用域有所不同。分为工程级、模块级、过程级三类,如下表

工程级变量 模块级变量 过程级变量

1. 工程级变量

全局变量,在整个工程中有效。 引用格式:窗体模块名.变量名

(1) 建立时间:程序一开始执行时即被建立 (2) 释放时间:整个程序结束时才释放空间 2. 模块级变量

局部变量,在当前模块(如窗体模块)中有效,其他模块不能引用。 (1) 建立时间:程序一开始执行时即被建立

(2) 释放时间:整个程序结束时才释放空间 3. 过程级变量

屏蔽变量,在当前过程中有效,不能被其他过程引用。 (1) 动态(Dim):无继承性 ①建立时间:所在的事件过程开始执行时即被建立 ②释放时间:所在的事件过程结束时就释放空间 (2) 静态(Static):有继承性

①建立时间:所在的事件过程开始执行时即被建立 ②释放时间:整个程序结束时才释放空间

Public 在“通用”->“声明”中定义 在“通用”->“声在“通用”->“声明”中定义 明”中定义 动态变量,在过程静态变量,在中定义 过程中定义 Private Dim Static 3.5 Visual Basic的数据运算

3.5.1 算术运算符与表达式

^(求指数)-(求负数)*(乘)/(浮点数除) \\(整数除) Mod(求余) +(加) -(减)

1. 只有数值型数据可以参加算术运算。

2. \\和Mod一般要求两个操作数是整型;若为实型时,自动先四舍五入为整数,然后进行运算。

3. \\是取商的整数部分;Mod是取余数。 4. a Mod b的结果符号与a相同。

3.5.2 关系运算符与表达式

=(等于) <>或><(不等于) <(小于) >(大于) <=(小于等于) >=(大于等于)

1. 关系表达式的结果是逻辑值:True或False。

2. 能够进行大小比较的类型有:数值型、字符型、日期型、逻辑型。 3. 字符型不是比较字符串的长短,而是比较字符串ASCII码的大小。 4. 日期型数据:现在的日期比过去的大。 5. 逻辑型:False(0)比True(-1)大。

6. VB中赋值运算符与等于运算符相同,可以根据语句位置来确定其含义。 例:Private Sub Form_Click( )

Dim a As Integer,b As Integer

a=3

If a>0 Then b=1 If a<0 Then b=-1 If a=0 Then b=0 Print “a=”;a;“b=”;b End Sub

3.5.3 逻辑运算符与表达式

1. Not(非):True变False,False变True。 2. And(与):a And b,只有均为True时,结果才为True。 3. Or(或):a Or b,只有均为False时,结果才为False。

4. Xor(异或):a Xor b,当a和b均为True或均为False时,结果为False;否则为True。

5. Eqv(等价):a Eqv b,当a和b均为True或均为False时,结果为True;否则为False。

6. Imp(蕴含):a Imp b,当a为True,b为False时,结果为False;否则为True。 7. 只有逻辑型数据可以参加逻辑运算,逻辑表达式的结果是逻辑值。

3.5.4 字符串运算符与表达式

功能:将两个字符串拼接起来,形成一个新的字符串。 1. 格式1:表达式1 & 表达式2

将两个表达式作为字符串强行连接在一起。

2. 格式2:表达式1 + 表达式2

(1) 如果两个表达式都是字符串,则将它们直接连接(同“&”)。 (2) 如果一个是数字字符串,另一个是数值型,则进行加法运算。 (3) 如果一个是非数字字符串,另一个是数值型,则连接出错。 若表达式需要先计算后连接,则将算式用( )括起。

例:表达式1 表达式2 “&”的结果 “+”的结果

“123” “3” “1233” “1233” “123” 3 “1233” 126 123 3 “1233” 126 “123a” 3 “123a3” 出错 “3+5=” (3+5) “3+5=8” 出错

3.5.5 日期运算符与表达式

加(+) 减(-)

1. 现在的日期比过去的日期大。

2. 两个日期型数据相减,其结果表示两个日期相差的天数。

3. 一个日期型数据可以与一个整型数据相加、减,得到新的日期。 4. 应避免两个日期型数据相加。

3.5.6 运算符的优先级

括号 -> 算术运算/字符串运算 -> 关系运算 -> 逻辑运算 算术运算符:^ -> 负号 -> *、/ -> \\ -> MOD -> +、- 字符运算符:-、&相同

逻辑运算符:Not -> And -> Or -> Xor -> Eqv -> Imp 同一级别从左到右运算。

可以用括号来改变优先顺序。

第四章 程序设计基础

教学目的及要求:

使学生掌握顺序结构、分支结构、循环结构的语法规则和具体应用,程序调试的步骤和方法。

重点与难点:

1、熟练掌握表达式、赋值语句及逻辑表达式等的书写约定 2、掌握InputBox和MsgBox函数的用法 3、掌握单分支和多分支条件语句

4、熟练掌握For语句和While语句的使用 5、难点是多重循环的程序设计

主要外语词汇:

Context 、Prompt、MsgBox、InputBox 授课内容:

1. 三种基本结构:顺序结构、选择结构、循环结构 2. 流程图:(1)传统的流程图 (2)N-S流程图

4.1 顺序结构程序设计

特点:按书写时的顺序依次执行。

4.1.1 VB中的语句及书写规定

1. 自动语法检测 2. 格式化处理

3. 续行符:下划线,一条语句写在多行上。

下划线与其前面的字符之间至少要有一个空格。

4. 复合语句行:冒号,多条语句写在一行上。

4.1.2 赋值语句

1. 可以给一个变量或某一个对象的属性赋值。

格式1:变量名 = 表达式

格式2:[对象名.]属性名 = 属性值

若省略对象名,则默认是当前窗体。

方向性:从右向左赋值。 2. 最终的结果是最后一次的赋值。 3. 数据类型要匹配,注意相容现象:

(1)逻辑型 -> 数值型:True -> -1,False -> 0

数值型 -> 逻辑型:非0 -> True,0 -> False (2)实型 -> 整型:四舍五入原则,不是去尾原则

整型 -> 实型:扩展小数位数

4. 不管表达式是什么数据类型,都可以赋给一个Variant变量。 5. 系统提供的默认初始值:

(1)数值型:0 (2)货币型:0 (3)字符型:空字符串 (4)逻辑型:False (5)日期型:0:00:00

(6)可变型:Empty (7)对象型:Nothing 6. 不能连续赋值:

例:Dim a As Integer,b As Integer,c As Integer

a=b=c=1 错误 a=1: b=1:c=1 正确

7. 交换两个变量中的数据: 例:a=b:b=a 错误

t=a:a=b:b=t 正确,t是中间变量

注意:VB中的数字和只包含数字的字符串可以方便地互换类型,例: (1)隐式转换:

Private Sub Command1_Click( ) Dim x As Integer,y As String

y = “100.23” :x = y ‘隐式转换 Print x End Sub

(2)显式转换:字符型 -> 数值型,利用Val函数:

Private Sub Command1_Click( ) Dim x As Integer Text1.Text = “100.23”

x = Val(Text1.Text) ‘显式转换 Print x End Sub

(3)显式转换:数值型 -> 字符型,利用Str函数:

Private Sub Command1_Click( ) Dim x As Integer x = 100.23

Text1.Text = Str(x) ‘显式转换 Print Text1.Text End Sub

例4-1 交换两个变量中的数据

4.1.3 注释(块注释)、暂停、结束语句

1. 注释语句:非执行语句,增强程序的可读性

(1) 格式1:Rem 注释语句 (2) 格式2:‘注释语句(常用)

(3) 块注释:视图-> 工具栏 -> 编辑 -> 设置注释块、解除注释块 2. 暂停语句:Stop

暂停程序的运行,但不关闭所有已打开的文件,相当于在程序代码中设置断点,主要用于调试程序。 3. 结束语句:End 停止程序的运行,关闭所有已打开的文件。还可以用来结束一些模块的操作。

例:Private Sub Command2_Click( )

End

End Sub

例4-2:统计票额总张数最少的付款方案

4.1.4 输入函数InputBox

在一对话框中显示提示,等待用户输入内容,并返回包含文本内容的字符串。 1. 格式:

InputBox (prompt [, title] [, default] [, xpos, ypos] [, helpfile, context] ) (1) prompt:对话框的消息提示文字,可包含回车Chr(13)、换行Chr(10)字符。

(2) title:对话框的标题,标题省略取默认值“工程1”。 (3) default:文本框的默认输入信息。 2. InputBox函数的返回值是字符型的。 3. 每运行一次InputBox函数只能给一个变量赋值。 总结:输入数据的方法: (1) 在程序代码中直接指定:

优点:代码简单 缺点:缺少灵活性

(2) 利用TextBox文本框输入数据:

优点:可以输入任意值

缺点:要添加多个文本框,界面复杂 (3) 利用InputBox函数输入数据:

优点:界面简单,可以输入任意值 缺点:代码复杂,参数较多

4.1.5 消息函数和语句MsgBox

在一对话框中显示消息,等待用户单击按钮,并返回1-7之间的一个整数。 1. MsgBox函数:

(1) 格式:MsgBox (prompt [, buttons] [, title] [, helpfile, context] ) A. prompt:对话框的消息提示文字。 B. buttons: 1) 组合值,每组只能取一个数字,数字间用“+”连接。 2) 进行相加(只有唯一的分解方式)。

3) 使用VB常数。(表4-1) 4) 方式1)和方式3)可以结合起来使用。 5) 把“+”换成“Or” 例:3 + 32 + 0

vbYesNoCancel + vbQuestion + vbDefaultButton1 vbYesNoCancel + 32 + vbDefaultButton1

C. title:对话框的标题,标题省略取默认值“工程1”。

(2) MsgBox函数的返回值是整型的:1-7(表4-2) 例:Private Sub Form_Load( ) Dim a As Integer Show

a=MsgBox(\请你选择:\参数组合举例\ If a=6 Then

Unload Form1 Form2.Show End If

If a=7 Then

Unload Form1 Form3.Show End If

If a=2 Then End End If

End Sub 2. MsgBox语句:

仅仅用于显示一些简单的信息而不需要返回值。

格式:MsgBox prompt [, buttons] [, title] [, helpfile, context] 参数含义:同上

不用写小括号,没有返回值,可以单独作为一个语句来使用。

4.1.6 数据输出

输出到屏幕或打印机的方法有多种,本节主要提供与Print配合使用的几个函数。 Print的缺省输出:从窗体的第1行第1列开始输出。 Tab函数:

格式:Tab(n),参数n是绝对列数值。 Tab函数与表达式之间用分号分隔。

如果当前行的当前打印位置大于n,则Tab将打印位置移动到下一行的第n列上。 如果n小于1,则Tab将打印位置移动到该行的第1列。

如果n大于输出行的宽度,则Tab函数用以下公式计算下一个打印位置:

n Mod 行宽。 例:Print \姓名\年龄\职务\单位\

Spc函数:

从当前位置跳过n个空格的位置,格式为: Spc(n),参数n是相对列数值。

Spc函数与表达式之间用分号分隔。

如果n小于输出行的宽度,则下一个打印位置将紧接在数个已打印的空白之后。 如果n大于输出行的宽度,则Spc函数用以下公式计算下一个打印位置:当前打印位置+(n Mod 行宽)。

n的取值在0~32767

Space函数:

格式:Space(n),输出n个空格

注:Spc函数与Space函数作用相同,但Space函数可以使用字符串运算符&和+。 总结:输出行的控制:Print后面不跟表达式,只输出一行空行。 输出列的控制:用Tab、Spc或Space函数调整。 作业:上机编程调试习题四中第一大题的第13小题

4.1.7 输出到打印机

1. 直接输出:

格式:Printer.Print [表达式]

只能打印文本信息,不能打印图形图像信息。 可结合Printer对象的以下属性、方法一起使用: (1) Page属性:用来设置页码,默认缺省值为1。 (2) NewPage方法:强制打印机跳到下一页打印。 (3) EndDoc方法:用来结束文件的打印。 2. 窗体输出:

格式:[窗体.]PrintForm

既将信息输出到窗体,又将信息输出到打印机。?

Sends a bit-by-bit image of a Form object to the printer. 预览作用

(1) [窗体.]AutoRedraw=True

(2) 可以打印窗体上的文本、任何可见的控件及图形信息。 附:方法与函数的区别:

(1) 方法可以单独作为语句使用,函数不可以。 (2) 方法没有返回值,函数有返回值。 (3) 方法的格式:[对象.]方法 [参数列表]

函数的调用格式:函数名([参数列表])

(4) 方法是隶属于某一个对象的,函数存在于VB自带的函数库。

4.2 选择结构程序设计

特点:根据指定的条件进行判断,根据判断的结果在两条分支或多条分支路径中选取其中的一条执行。

4.2.1 行IF语句

格式1:If 条件 Then 语句组1

格式2:If 条件 Then 语句组1 Else 语句组2 语句组中的多个语句之间用冒号分隔。

┋ False 条件 True 语句组1 语句组2 True 条件 False 语句组1 ENDIF的下一条语句 语句组2

例4-4:求绝对值,行IF语句的使用。

4.2.2 块IF语句

格式3:If 条件 Then 格式4:If 条件 Then

语句组1 语句组1 End If Else

语句组2

End If 1. Else必须单独一行。

2. If?End If必须成对出现。行If语句中不需要End If。

3. 最好采用缩进形式。

4. 如果语句组1、语句组2中含有多条语句时,最好使用块If语句。 5. 块IF语句的嵌套,例4-5

4.2.3 IF语句的嵌套ElseIf语句

格式:If 条件1 Then 语句组1

ElseIf 条件2 Then 语句组2 ??

ElseIf 条件n Then 语句组n Else

语句组n+1 End If

1. VB首先测试条件1,如果它为False,VB就测试条件2,依次类推,直到找到一个为True的条件。此时,VB就会执行相应的语句组,然后执行End If后面的语句。

2. 不能交叉嵌套(内外层),只能完全嵌套。 3. 可以使用任意数量的ElseIf语句。 4. 只有一个End If与If相对应。

例4-6,商场购物打折的计算

4.2.4 多条件选择语句Select Case

格式:Select Case 测试表达式 Case 表达式1 语句组1 Case 表达式2 语句组2 ……

Case 表达式n 语句组n [ Case Else

语句组n+1 ]

End Select

改进:Select Case 测试表达式 ‘复合语句 Case 表达式1:语句组1 Case 表达式2:语句组2 ……

Case 表达式n:语句组n [ Case Else :语句组n+1 ]

End Select

1. 测试表达式只能是数值型或字符型。

2. 测试表达式只计算一次,然后VB将表达式的值与结构中的每个Case的值进行比较,如果相等,就执行与该Case相关联的语句组。

3. 如果不止一个Case与测试表达式相匹配,则只对第一个匹配的Case执行与之相关联的语句组。

4. 表达式n的可能形式:

(1) 表达式1[,表达式2][,表达式3]?? 无大小顺序。 (2) 表达式1 To 表达式2 包括表达式1和表达式2在内。

(3) Is<关系运算符><表达式>

只能是简单的条件,不能用逻辑运算符将两个或多个条件组合在一起。 以上三种形式可以混合使用。

例4-7:输入月份,求所属季度

例4-8:进行10-99之间两位数的加、减、乘、除运算,并判断得分。

4.2.5 条件判断函数IIF

格式:IIf(条件,表达式1,表达式2)

1. 当条件为真时,函数返回值是表达式1的值;当条件为假时,函数返回值是表达式2的值。

例:Print IIf(cj>=60,“通过”,“不通过”)

2. IIf函数可以嵌套使用。 例:Print IIf(a<0,-1,IIf(a=0,0,1)) 总结:

1. 行If语句:双分支结构 2. 块If语句:双分支结构 3. If语句的嵌套:多分支结构 4. ElseIf语句:多分支结构

5. 多条件选择语句Select Case:多分支结构 6. 条件判断函数IIf:双分支结构

4.3 循环结构程序设计

1. 特点:根据给定条件是否满足决定是否继续执行循环体中的操作。 注:避免出现“死循环”。当程序运行了“死循环”的结构,必须按Ctrl+Break中断。 2. 三种循环结构:

(1)For?Next (2)While?Wend (3)Do?Loop 3. 循环方式:(1)计数法 (2)标志法

4.3.1 For循环结构

格式:For 循环变量=初值 To 终值 [Step 步长] 循环体 Next [循环变量]

循环控制变量=初值 循环控制变量 当前值超出终值? False True 循环体语句组 循环控制变量=循环控制变量+步长 Next的下一条语句

1. 缺省步长时,默认是1。步长可以为正值或为负值。 2. 先判断条件,后执行循环体。

注:若循环体执行n次,则条件将被判断n+1次。

3. Exit For语句的作用:提前退出循环体,结束循环结构。 4. 空循环的作用:延时。

5. For循环一般用在已知循环次数的情况。 6. 多重循环:不能交叉嵌套,只能完全嵌套。 各层次的循环变量名不能相同。

7. 多重循环可以共用一个Next语句,但此时循环变量名不能省略,并且先内循环变量,后外循环变量。

Private Sub Command1_Click() Dim s As Integer, i As Integer For i = 1 To 99 Step 2

s = s + i Next i

Print \的和是:\ Print \的当前值是:\End Sub

例:For i=1 To 10 For j=1 To 15 For k=1 To 20 循环体 Next k Next j

Next i

例4-9:求1!+2!+3!+…+n!的值 例4-10:打印九九乘法表

4.3.2 当型循环While…Wend结构

格式:While 条件 循环体 Wend

False 逻辑表达式 True 循环体语句组 Wend后的下一条语句

1. 先判断条件,后执行循环体。

注:若循环体执行n次,则条件将被判断n+1次。

2. 循环体内一定要有改变条件的语句,否则就会导致“死循环”。 3. 多重循环:不能交叉嵌套,只能完全嵌套。 例4-11:求两个数的最大公约数。

4.3.3 Do…Loop循环结构

1. 既可以是当型循环,也可以是直到型循环。 2. While与Untill后面的“条件”总是相反的。 3. 既可以先判断后执行:

若循环体执行n次,则条件将被判断n+1次。 也可以先执行后判断:

若循环体执行n次,则条件将被判断n次。

4. Exit Do语句的作用:提前退出循环体,结束循环结构。 当 型 循 环 直 到 型 循 先判断后执行 Do While 条件 循环体 Loop 与While?Wend结构相同 Do Untill 条件 循环体 Loop Do Do 先执行后判断 循环体 Loop While 条件 循环体 Loop Untill 条件 环

例4-12:求1?111111???????的前n项之和。 248163264总结:提前退出循环体的方法: (1) For?Next :用Exit For语句 (2) While?Wend

(3) Do?Loop :用Exit Do语句 总结:

1. For循环结构:计数法。

2. While循环结构:计数法、标志法,可以实现多条件判断。 3. Do?Loop循环结构:计数法、标志法,可以实现多条件判断。

4.3.4 常用算法举例

1. 例4-13:输入一个正整数,判断是否为素数。

2. 例4-14:用牛顿切线法求高次方程3x?4x?5x?13?0的根。 3. 例4-15:用二分法求高次方程3x?4x?5x?13?0的根。 4. 用迭代法求x?为xn?1?2222a,a从键盘输入(a>0)。要求x的误差小于0.00001。迭代公式

1?a???x? n?2?xn??4.4 其他辅助语句

4.4.1 GoTo语句

功能:无条件地转向执行语句标号或行号的语句。

1. 格式1:Goto 语句标号 语句标号后面必须加一个冒号。 2. 格式2:Goto 行号 行号后面不能加冒号。

4.4.2 On-GoTo语句

格式:On 数值表达式 Goto 语句标号|行号

缺点:BS现象

*4.5 闲置循环与DoEvents

*4.6 程序的调试与错误处理(自学)

4.6.1 错误类型

4.6.2 程序调试工具

4.6.3 三种程序模式

4.6.4 使用调试窗口

第五章 常用内部函数

教学目的及要求:

使学生掌握函数的概念,函数的调用格式,VB中的常用内部函数。

重点与难点:

1. 学会调用内部函数进行各种运算。 2. 掌握调用各种函数时需要的参数、函数的参数类型和函数返回值类型,这也是本章的难点。

主要外语词汇:

ANSI 、function randomize、 format

授课内容:

1. 函数的分类:

(1)内部函数(2)外部函数(用户自定义函数、函数过程)

2. VB常用的内部函数有:数学函数、字符串函数、转换函数、日期与时间函数、其他函数。

3. 函数的一般调用格式为:函数名([参数表]) 注:参数的类型和个数。

若参数类型或个数不匹配,则提示出错信息。 4. 方法与函数的区别:

(1)方法可以单独作为语句使用,函数不可以。 (2)方法没有返回值,函数有返回值。

(3)方法的格式:[对象名.]方法 [参数列表]

函数的格式:①变量名=函数名([参数列表])

②[对象名.]属性=函数名([参数列表])

5. 一般将函数值进行输出或赋值给某个变量。

5.1 常用函数

5.1.1 数学函数

1. Sgn(n),符号函数,n=0返回值为0;n>0返回值为1;n<0返回值为-1 2. Sqr(n),平方根函数,n>=0 3. Exp(x),以e为底的指数函数

4. Log(x),以e为底的对数函数,试求以10为底的对数,表示a为正确的VB表达式

5. Int(x),返回不大于x的最大整数,Fix(x)去掉小数函数,CInt(x)四舍五入函数,Round(x)同CInt(x)。

例5-1:查询某年的元旦是星期几 例5-2:求方程ax?bx?c?0的解。

2x5.1.2 字符串函数

1. 常用字符串函数

(1) 过滤空格函数:LTrim(S)、RTrim(S)、Trim(S)

(2) 取子串函数:Left(S,N)、Right(S,N)、Mid(S,N1[,N2])

(3) 查找子串函数:InStr([N1,]S1,S2),在S1中从第N1个字符开始查找S2,若找到,

返回S2第一个字符在S1中的位置,找不到则返回0。省略N1,则从头查找。

(4) 测试字符串长度函数:

1) Len(S):测试字符串S的字符个数,中西文字符均算1个字符。 2) LenB(S):测试字符串S的字节数,中西文字符均占2个字节。 LenB(S)=2*Len(S) (5) 大小写字母转换函数

1) Ucase(S):将字符串S中的小写字母改为大写字母。 2) Lcase(S):将字符串S中的大写字母改为小写字母。 (6) 反序输出函数:StrReverse(S) (7) 字符串生成函数:

1) Space(S):生成N个空格的字符串 2) String(N,S):生成N个S单个字符

例:Print String(5,“a”)

Print String(5,“abcd”) 结果相同 在字符串函数名后面可以加“$”符号。 例:Print String(5,“*”)

Print String$(5,“*”) 等价 2. 字符串的编码方案: (1) ANSI方式:

美国国家标准协会制定,西文字符占用1个字节,汉字占用2个字节。 (2) UniCode方式:

国际标准化组织ISO制定,西文字符和汉字统一进行编码,占用2个字节。 VB6.0内部采用UniCode编码形式来存储字符串。

(3) 字符处理函数:针对字符数,中西文字符均算1个字符。 (4) 字符处理函数+B:针对字节数,中西文字符均占2个字节。 (5) StrConv函数:

格式:StrConv( S,指定格式 )

1) S:要转换的字符串表达式。 2) 指定格式:

① vbUnicode(64):ANSI格式 -> UniCode格式 ② vbFromUnicode(128):UniCode格式 -> ANSI格式 ③ vbUpperCase(1):将字符串S文字转换成大写

④ vbLowerCase(2):将字符串S文字转换成小写 ⑤ vbProperCase(3):将字符串S每个字的开头字符转换成大写

例5-3:反向输出字符串

5.1.3 转换函数

1. Asc(S):给出字符串S的首字符的ASCII码值。 2. Chr(N):给出ASCII码值是N的字符。N:0-127 例:Chr(13):回车 Chr(10):自动换行 3. Str(N):将数值N转换为字符型。

4. Val(S):将数字字符串S转换为数值型。在S中只要遇到第一个非数字字符就视为

结束。

VB中的数字和只包含数字的字符串可以方便地互换类型,例: (1) 隐式转换:

Private Sub Command1_Click( )

Dim x As Integer,y As String ?x必须定义类型 y = “100.23” :x = y ‘隐式转换 Print x

End Sub

(2) 显式转换字符型 -> 数值型:利用Val函数: Private Sub Command1_Click( )

Dim x As Integer ?x可以不用定义类型 Text1.text = “100.23”

x = Val(Text1.text) ‘显式转换 Print x

End Sub

(3) 显式转换数值型 -> 字符型:利用Str函数:

Private Sub Command1_Click( )

Dim x As Integer,y as String ?y可以不用定义类型 x = 100.23

y = Str(x) ‘显式转换

End Sub 注:显式转换时可以事先不用定义数据类型,但隐式转换时一般需要事先定义数据类型。 例:Text3.Text=CDate(Text1)-CDate(Text2) 正确 Text3.Text=Text1-Text2 错误 一般可以隐式转换的函数有:Str、Val、CCur、CDbl、CLng、CSng、CDate等。 数制转换的函数有Hex(N)、Oct(N)。 例5-4:字符的编码/解码 例5-5:数制的转换

5.1.4 日期和时间函数

1. 常用日期和时间函数:

(1) Day()、Month()、Year()、WeekDay(),参数可以日期型,也可为日期格式的字符型。 (2) 函数Now()、Time()、Date()可以省略(),写成Now、Time、Date。

(3) MonthName()、WeekDayName(),其中参数月份的取值为1-12,星期的取值为1-7 2. DateDiff( ):

格式:DateDiff(“日期单位”,日期1,日期2)

返回两个指定日期间的时间间隔数目。日期单位见表5-5 例:DateDiff(“d”, #1-1-2001#, #2002-1-1#)

5.2 其他函数

5.2.1 随机函数Rnd和随机语句Randomize

1. Rnd函数:

格式:Rnd[(N)],N称为“种子”(基数),一般省略可选项N。 作用:可以产生[0,1)的双精度(Double)随机数。

参数N:

(1)N<0:产生相同的随机数,该随机数与N有关,不可取。 (2)N>0:产生不同的随机数,该随机数与N无关。

默认值,即取任意一个>0的值作为“种子”与不取可选项是一样的。都是把上一个随机数作为下一个随机数的“种子”,可产生不同的随机数。 尽管所产生的每个随机数不同,但每次运行所产生的随机数都是一样的。

(3)N=0:产生相同的随机数,该随机数与N无关,与最近生成的随机数相同,不可取。

常用形式:Rnd

该函数的缺点:“种子”固定,缺少随机性。 2. 若要产生[n,m]之间的整数,可以用公式: Int(Rnd*(m-n+1))+n 或 Int(Rnd*(m-n+1)+n) 若要产生[1,m]之间的整数,可以用公式: Int(Rnd*m)+1 或 Int(Rnd*m+1)

3. Randomize函数:

格式:Randomize[(N)],一般省略可选项N。 作用:生成一个随机的“种子”,初始化随机数生成器。 常用形式:Randomize 该语句要用在Rnd函数之前。 例5-6:英文打字测试程序

5.2.2 Shell函数

格式:Shell(“命令文件名”[,窗体模式])

作用:执行一个可执行文件(.COM .EXE .BAT)。 (1) 命令文件名:必要参数,绝对路径,要执行的程序名。 (2) 窗体模式:可选参数,表示程序运行时窗口的样式。

值 常量 说明

0 vbHide 窗口被隐藏,且焦点会移动到隐式窗口

1 vbNormalFocus 窗口具有焦点,且会还原到原来大小和位置 2 vbMinimizedFocus 窗口会以一个具有焦点的最小化图标来显示,默认值 3 vbMaximizedFocus 窗口是一个具有焦点的最大化窗口

4 vbNormalNoFocus 窗口会被还原到最近所使用的大小和位置,而当前活动的窗口仍然保持活动

6 vbMinimizedNoFocus 窗口最小化为图标,而当前活动的窗口仍然保持活动

(3) 在运行期间数组的大小及维数可以改变。 2. 动态数组的重声明:

格式1:ReDim 数组变量名(下标) [As 类型]

(1) 可以重新指定数组的大小及维数,但不能改变数组的类型。 (2) 使用步骤:

①先声明一个动态数组。

②在事件过程中使用ReDim语句重新定义。 ReDim语句只能在事件过程中使用。

(3) 在一个事件过程中,可以多次用ReDim语句定义同一个数组。 例:Dim a( ) As String

Private Sub Command1_Click( ) ReDim a(5)

a(2)=“Microsoft” Print a(2); ReDim a(2,4)

a(2,2)=“ Visual Basic” Print a(2,2) End Sub

(4) 不能对静态数组进行重声明。

(5) 每次执行ReDim语句后,当前存储在数组中的值都会全部丢失。 格式2:ReDim Preserve 数组变量名(下标) [As 类型] 使用关键字Preserve可以保留现有元素的值不丢失。 例6-2:数组直接对数组赋值。

在VB6.0中,允许数组直接对数组进行整体赋值。

但被赋值的数组只能声明为可变类型的动态数组,否则出错。 例:Dim a(5) As Integer,b( )

a(0)=1: a(1)=2: a(2)=3: a(3)=4: a(4)=5 ReDim b(UBound(a))

b=a 正确

例6-3:Fibonacci数列的输出。 3. 数组元素的初始化: 格式:Erase 数组名

作用:对于静态数组,进行初始化,全部元素置0或空字符串等。 对于动态数组,释放内存空间,清除。

6.1.5 For Each…Next语句

格式:For Each 循环变量 In 数组名 循环体

Next [循环变量]

优点:在对数组操作时,不用考虑数组元素的越界问题,当遍历了数组的所有元素后,即自动退出循环。

格式:For 循环变量=初值 To 终值 [Step 步长] 循环体 Next [循环变量]

总结:

For ? Next 必须定义循环变量的数据类型 步长任意取值 适用于普通变量和数组的循环 循环次数由初值、终值、步长决定 For Each ? Next 循环变量必须是可变类型 步长默认为1 只适用于数组的循环 循环次数由数组元素个数决定 6.2 数组应用

6.2.1 排序

将一组无序的数按其值的大小重新排列。 1. 比较交换排序法: 例6-4:效率低 2. 选择交换排序法: 效率高

3. 冒泡排序法:

例6-5:效率低

6.2.2 查找(检索)

1. 事先需要对数据进行排序,排序是快速查找的必要条件。 2. 折半查找法(对半搜索法、二分法)

例6-6:在降序排列的数组中查找。 例6-7:应用二维数组实现查找。 总结:一维数组的主要应用:

1、求最大值、最小值、和、平均值 2、加密 3、倒序 4、排序 5、查找 6、删除一个元素 7、插入一个元素

6.3 控件数组

1. 控件数组是由一组相同名称、相同类型的控件组成。 2. 控件的索引号Index,相当于一般数组的下标。 控件数组是在设计时通过设置控件的Index属性规定的。

例如:Label1(0)、Label1(1)、Label1(2)?是一个标签控件数组, 而Label1、Label2、Label3?不是控件数组。

3. 控件数组最多可达到32767个元素。第一个控件的索引号默认为0。 控件数组一般具有相同的属性、共用的事件过程。 4. 索引号的特点:

(1)可以任意指定 (2)可以不连续 (3)不能相同 优点:简化程序,节约内存。

6.3.1 创建控件数组

1. 方法一:利用“复制”、“粘贴”命令 2. 方法二:给控件取相同的名称(Name属性) 删除控件数组中的元素:Del(Delete)键 常用方法一:

Private Sub Command1_Click( ) ?? End Sub

Private Sub Command2_Click( ) ?? End Sub 常用方法二:

Private Sub Command1_Click(Index As Integer)

If Index=0 Then

??

End If

If Index=1 Then

…… End If End Sub 常用方法三:

Private Sub Command1_Click(Index As Integer) Select Case Index Case 0: ?? Case 1: ?? ?? End Select End Sub

3. 方法三:用命令添加、删除:

(1) 格式:Load 控件数组名(Index) 添加控件数组中的元素

Unload 控件数组名(Index) 删除控件数组中的元素

(2) 用Load方法添加的控件数组元素与该数组第一个元素位置重合,必须通过Left和Top属性确定其在窗体上的位置,并将Visible属性设置为True。

注:用Load方法不能复制控件数组元素的Top、Left和Visible属性。 (3) Load方法只能添加已有控件数组的元素,不能创建控件数组。

(4) Unload方法只能删除用Load添加的元素,不能删除设计时创建的控件数组元素。 (5) Unload方法也不能一次删除整个控件数组。 例:Unload Command1 错误

6.3.2 控件数组应用举例

例6-8:设计简单计算器。 例6-9:用命令添加控件元素。

第七章 常用控件

教学目的及要求:

控件的分类,会利用本章控件设计程序界面 重点与难点:

1. 掌握常用控件(单选钮、复选框、框架、列表框、组合框、滚动条、计时器、图片框、

图像框)的常用属性、事件和方法的使用 2. 进一步掌握窗体和控件事件过程代码的编写 主要外语词汇:

optionbutton、frame、listbox、combobox、scrollbar、timer、picturebox、image

7.1 控件概述

VB的控件分为三类:内部控件、ActiveX控件和插入对象。 1. 内部控件(标准控件):

指针(Point) 图片框(PictureBox) 标签(Label) 文本框(TextBox)

框架(Frame) 命令按钮(CommandButton) 复选框(CheckBox) 单选按钮(OptionButton) 组合框(ComboBox) 列表框(ListBox) 水平滚动条(HScrollBar) 垂直滚动条(VScrollBar) 定时器(Timer) 驱动器列表框(DriveListBox) 目录列表框(DirListBox) 文件列表框(FileListBox) 形状(Shape) 线条(Line) 图像框(Image) 数据(Data) (1) 它们是VB本身提供的控件,不能从工具箱中删除。 (2) 打开工具箱:①工具栏 -> 工具箱 ②视图 -> 工具箱 2. ActiveX控件:

OLE:Object Linking and Embedding,对象的链接和嵌入。 ActiveX控件是VB内部控件的扩充。

只要条件允许,就能使用在不同的编程环境(如VB、VC、VFP、VJ等)中。 添加到工具箱中的方法: (1) 工程 -> 部件 -> 控件标签

(2) 工具箱(右键)-> 部件 -> 控件标签 只有正确添加后才可以使用ActiveX控件。 ActiveX控件存在位置:C:\\Windows\\System\\*.OCX 选项页(SSTab) 进度条(ProgressBar) 滑块(Slider) 动画(Animation) Internet传输控件(Internet Transfer)

通信(Commuications) 图像列表(ImageList) 列表查看(ListView) 电子邮件(MAPI)

掩码模板(MaskedEdit) 图表(MSChart) 多媒体(Multimedia) 图像(PictureClip) 文本(RichTextBox) 状态栏(StatusBar) 检测系统事件(SysInfo) 通用对话框(CommonDialog) 3. 可插入对象:

由其他应用程序创建的对象。 添加到工具箱中的方法:

(1) 工程 -> 部件 -> 可插入对象标签

(2) 工具箱(右键)-> 部件 -> 可插入对象标签 只有正确添加后才可以使用插入的对象。

7.2 常用内部控件

7.2.1 单选按钮、复选框

1. 单选按钮(OptionButton):选项唯一 (1) 属性:

1) Name:OptionX(X=1,2,3,?)

2) Value:为True时表示被选中,为False(默认值)时表示未被选中。 (2) 事件:Click事件 例7-1:单选钮的使用

注:若预先选定一单选按钮,应在Form_Load事件过程中将其Value属性设置为True,系统不提供默认情况。

也可以在属性窗口中进行设置。

2. 复选框(CheckBox):选项不唯一 (1) 属性:

1) Name:CheckX(X=1,2,3,?)

2) Value:为0(默认值)时表示未被选中,为1时表示被选中,为2时表示暂时不能访问。

设置值 Unchecked Checked Grayed (2) 事件:Click事件

数值 0 1 2 常数 vbUnchecked(默认值) vbChecked vbGrayed 例7-2:使用复选框

注:若预先选定若干复选框,应在Form_Load事件过程中将其Value属性设置为1,系统不提供默认情况。

也可以在属性窗口中进行设置。

7.2.2 框架(Frame)

作用:(1)分组:屏蔽作用 (2)美观

必须先将框架添加到窗体上,然后再将控件“画”在框架内,这样,才能达到分组的目的。

只能用单击形式,不能用双击形式。

当框架移动时,其中的控件也随着移动,删除时一并删除。 同一窗体内被框架组合的各组单选按钮是相互独立的。 1. 属性:

(1) Name:FrameX(X=1,2,3,?) (2) Caption: 2. 事件:一般不需要

7.2.3 列表框和组合框

1. 列表框(ListBox)

在列表框内的项目称为表项,表项的加入是按一定的顺序号进行的,这个顺序号称为索引。索引号从0开始。

(1) 属性:

1) Name:ListX(X=1,2,3,?) 2) Style:列表框的外形。

3) List:用于存放列表框的表项,实际上是一个字符型数组。 例:Print List1.List(0)

List1.List(1)=List1.List(1) & “程序设计” 4) ListIndex:用于设置或返回当前选定项目的索引值。 5) ListCount:返回列表框中表项的数量。 6) Text:对应用户在运行时选定的表项内容。 例:Private Sub List1_Click( )

If List1.Text=List1.List(0) Then

End If

If List1.Text=List1.List(1) Then ? End If End Sub

7) Columns:指定列表框中的列数。

8) Sorted:设置列表框中的各表项在运行时是否自动按顺序排列。 ①False:默认值,按输入的先后顺序排列

②True:自动排列,排序时不区分大小写 9) MultiSelect:设置是否允许同时选择多个表项。

若允许同时选择多个表项,Text属性为选定的最后一项表项的内容。 10) Selected:判断表项是否被选中,实际上是一个逻辑型数组。 总结:判断表项是否被选中的方法: 例:Private Sub List1_Click( )

If List1.Selected(0)=True Then Print “我选中了第一项” If List1.ListIndex=1 Then Print “我选中了第二项”

End Sub

(2) 向列表框中添加表项的方法: 1) 方法一:利用属性窗口:利用List属性

每输入一项按Ctrl+Enter键换行,全部输入完后按Enter键,所输入的表项即出现在列表框中。

2) 方法二:利用代码窗口:

通常在Form_Load事件过程中添加表项,但也可以在任何时候使用AddItem方法添加表项,也就是可以动态地添加。

格式:列表框名.AddItem 表项[,索引号]

若省略索引号,则将表项插入到末尾;索引号为0表示插入到首行。 例:Private Sub Form_Load( )

Show

List1.AddItem “Germany” List1.AddItem “India” List1.AddItem “France” List1.AddItem “USA” End Sub

注:TextBox的Text属性,ListBox的List属性。

TextBox和ListBox都没有Caption属性。

例题:设计一个程序,找出100-800范围内所有能同时被3和8整除的自然数。 07_3.vbp

(3) 事件:Click事件、DblClick事件

双击列表框中的表项,与先选定表项然后单击命令按钮,这两者应该是具有相同的效果。

(4) 从列表框中删除表项的方法: 格式:列表框名.RemoveItem 索引号

删除索引号指定的某一项,索引号为0表示第一项。 (5) 删除所有表项的方法: 格式:列表框名.Clear

注:(1)Cls方法:将窗体、图片框对象上用Print方法显示的内容清除。 (2)Erase方法:对于静态数组,进行初始化,全部元素置0或空字符串等。 对于动态数组,释放内存空间,清除。

(3)Clear方法:将列表框、组合框中的所有表项清除。 2. 组合框(ComboBox):

是文本框与列表框的组合。用户可以从文本框中输入文本,也可以从列表框中选择列表项。

区别:组合框用于建议性的选项列表,而当希望将输入限制在列表之内时,应使用列表框。

(1) 属性:

1) Name:ComboX(X=1,2,3,?)

2) Text:对应用户在运行时选定的表项内容或直接从文本框中输入的内容。 例:Private Sub Combo1_Click( )

If Combo1.Text=Combo1.List(0) Then

End If

If Combo1.Text=Combo1.List(1) Then

?

End If End Sub

3) List:用于存放列表框的表项,实际上是一个字符型数组。 例:Print Combo1.List(0)

Combo1.List(1)=Combo1.List(1) & “程序设计” 4) ListIndex:用于设置或返回当前选定项目的索引值。

5) ListCount:返回列表框中表项的数量。

6) Sorted:设置列表框中的各表项在运行时是否自动按顺序排列。 ①False:默认值,按输入的先后顺序排列 ②True:自动排列,排序时不区分大小写 7) Style:组合框具有三种不同的类型。

0:默认值,下拉组合框(Dropdown ComBox):允许用户输入内容 1:简单组合框(Simple ComBox):允许用户输入内容 2:下拉列表框(Dropdowm ListBox):不允许用户输入内容 组合框同样可以使用AddItem、RemoveItem、Clear等方法。 (2) 将输入在文本框中的内容添加到列表中:

例1:Private Sub Combo1_KeyPress(KeyAscii As Integer)

If KeyAscii=13 Then

Combo1.AddItem Combo1.Text End If End Sub

例2:Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii=13 Then Text2.SetFocus End If

End Sub

(3) 事件:Click事件、DblClick事件

双击组合框中的表项,与先选定表项然后单击命令按钮,这两者应该是具有相同的效果。 但是,只有简单组合框(Style为1时)才有DblClick事件。

7.2.4 滚动条(HscrollBar和VScrollBar)

TextBox、ListBox、ComboBox等中的滚动条是系统自动加上的。

滚动条控件是为不能自动支持滚动功能的应用程序和控件提供滚动功能,也可以作为数据输入的工具。

1. 属性:无Caption属性 1) Name:HScrollX(X=1,2,3,?) VScrollX(X=1,2,3,?)

2) Min(左/上)、Max(右/下):最小值(默认为0)、最大值(默认为32767) 3) Value:滚动块所处的位置所代表的值

4) LargeChange:单击空白处时,滚动块的变化量

本文来源:https://www.bwwdw.com/article/35kp.html

Top