怎样用VB程序设计出,单击command出现张三 李四 王五的信息及照片,再单击出现李四

ForeColor和BackColor
时间: 14:20:52
第1章概述1&&&&1.1 Visual Basic语言概述一、Visual BasicVisual Basic 是Microsoft 公司开发的Windows 应用程序开发工具,Visual ——“可视化的”,是一 种开发图形户界面(GUI)的方法。针对不同的用户,VB6.0有三个版本: 学习版、专业版、企业版2&&&&1.1 Visual Basic语言概述二、 Visual Basic的特点1. 面向对象的可视化设计平台 2. 事件驱动的编程机制3. 结构化的程序设计语言4. 充分利用Windows资源 5. 支持多种数据库系统的访问 6. Active技术 7. VB6.0在开发环境上、网络功能等的增强8. 完备的help联机帮助功能3&&&&1.1 Visual Basic语言概述总之,Visual BASIC是面向对象, 结构化的计算机语言,VB的界面由对象 (窗体和控件)组成,每个对象有若干 属性,程序员的任务就是设计这些对象 和对象的“事件”过程4&&&&1.2 Visual Basic 6.0的集成开发环境标题栏 菜单栏 工具栏主窗口 工程窗口 窗体窗口属性窗口工具箱窗口 代码窗口立即窗口监视窗口布局窗口5&&&&1.2 Visual Basic 6.0的集成开发环境VB的三种工作模式(标题栏总显示当前模式) (1)设计模式:创建应用程序的大多数工作都是在设计 时完成的。在设计时,可以设计窗体、绘制控件、编写代 码并使用“属性”窗口来设置或查看属性设置值。 (2)运行模式:代码正在运行的时期,用户可与应用程 序交流。可查看代码,但不能改动它。 (3)中断模式:程序在运行的中途被停止执行时。在中 断模式下,用户可查看各变量及不是属性的当前值,从而 了解程序执行是否正常。还可以修改程序代码,检查、调 试、重置、单步执行或继续执行程序。6&&&&1.3 可视化编程的基本概念1.对象 对象是现实世界的实体,如人、汽车、电脑等,并且 复杂的对象可以由若干简单的对象构成。 在程序设计中,对象是由描述其属性的数据和定义在 其上面的一组操作组成的实体,是数据单元和过程单元的 组合体。1个“文本框”对象 7个“单选框”对象 2个“复选框”对象多个“按钮”对象图1 编程中的“对象”7&&&&1.3 可视化编程的基本概念2、对象的三要素:属性、事件和方法 (1)属性:即一个对象所具有的性质、特征。 对象属性的设置一般有两种方式: *预设法—利用属性窗口设置 *现改法—通过程序代码更改 格式:对象名.属性名=属性值 例如:Text1.text=“welcome”8&&&&1.3 可视化编程的基本概念(2)事件 事件就是发生在该对象上的事情,发生在用户与应用 程序交互时,如单击控件、鼠标移动、键盘按下等。 ? 事件过程:当在对象上发生某个事件后,就要处理事件, 对事件作出反应,处理事件的步骤叫做事件过程。 在VB程序设计中,对象感应到某一事件发生时所执行的 程序称为事件过程。 事件过程的形式如下: Private Sub 对象名_事件名() ?(VB程序代码) End Sub9&&&&1.3 可视化编程的基本概念(3)方法 对象所具有的动作和行为。在编程中,对象的方法完 成某种特定功能,即将一些通用的过程编写好并封装起来, 作为方法供用户直接调用。 方法只能在代码中使用,调用方法的格式:对象名.方法名[参数名表]总结:建立一个对象后,操作通常用该对象的属性、事件和 方法来描述。把属性看作一个对象的性质、把事件看作对象 的响应,把方法看作对象的动作。10&&&&1.4 可视化编程的一般步骤VB的对象已经被抽象为窗体和控件,所以简化了应 用程序设计,一般需要三个步骤: ① 创建应用程序界面; ② 设置属性; ③ 编写代码。在程序设计之前,分析问题,设计算法是开发一个应用程序之 前必须要做的一个步骤,目的是弄清楚几个问题: 1、主要功能有哪些,通过什么方法来实现,主要的算法是什么,并 且要画出流程图、设计出算法; 2、使用几个模块来完成; 3、每个模块的主要内容。11&&&&1.4 可视化编程的一般步骤新建工程 添加控件,建立用户界面 设置对象属性 编写代码运行工程保存工程(先保存窗体文件,再保存工程文件)12工程编译,生成可执行程序&&&&第2章 窗体与常用控件本章重点:? 1. 窗体的属性、方法和事件 ? 2. 窗体上控件的布局 ? 3. 常用控件属性、方法和事件13&&&&2.1 窗体窗体对象窗体对象(Form)作为各种控件对象的容器,是应用程序 图形界面的基本组成部分; 一个应用程序可以有多个窗体,缺省时命名为Form1、 Form2、Form3等; 窗体对象的创建:在启动VB时选择“标准EXE”类型的工 程,则会自动创建一个窗体模块,包括一个窗体对象; 在工程中添加窗体对象:窗体对象单击“工程”菜单中的 “添加窗体”; 窗体是一个空窗口,由标题栏、边框及编辑区组成。14&&&&2.1 窗体1.窗体的属性? ?①Name:对象(窗体或控件)的名称对象名必须以字母开头,不能多于40个字符,可以包含字母、数 字和下划线,不能包括标点符号和空格; 对象名不能与其他公共对象重名;② Caption:显示在窗体标题栏中窗体图标后面的文字; ③ Visible:设置窗体是否可见,取值为True或False;True- 可见 False-隐藏 注意:Visible属性只有在运行时才生效,设计时可见。④ Icon:设置窗体标题栏中显示的图标; ⑤ Appearance:设置窗体的绘图风格;取值为0-绘制平面窗体 1-绘制三维效果15&&&&2.1 窗体⑥ Enabled:确定窗体是否对用户事件做出反应; ⑦ BorderStyle:决定窗体的边框类型、标题栏状态及其可缩 放性。(具体取值见课本P29表2.1) ⑧ ControlBox:决定窗体标题栏的显示状态 ⑨ ForeColor和BackColor:Ture-窗体正常显示 False-窗体标题栏只显示标题文字,不显示窗口图标及三个控制按钮 True-响应用户的鼠标或键盘操作 False-不响应用户操作ForeColor-显示在窗体上的图形和文本的前景颜色; BackColor-描述窗体的背景颜色⑩ Picture:为窗体指定一副背景图像;16&&&&2.1 窗体11 WindowState:决定窗体运行时的可视状态;取值为0-还原(默认值) 1-最小化 2-最大化12 Height, Width:分别指窗体的高度和宽度; Left, Top:决定窗体在屏幕上 的位置;Left-窗体外框的左边缘与屏幕显示区 左边缘之间的距离; Top-窗体外框的上边缘与屏幕显示区 上边缘之间的距离;x Top Left Width Height17y&&&&2.1 窗体13 MaxButton和MinButton:决定标题栏上最大化按钮和最小 化按钮是否可用;Ture-可用 False-不可用(以灰色显示) 注:当二者值均为False时,最大化与最小化按钮从标题栏上消失14 Moveable:Ture-窗体在运行时可以被用户通过鼠标拖动标题栏的方法进行移动; False-不能被拖动,但仍可由程序代码移动。? 通过程序代码为对象的属性赋值 赋值语句格式: 对象名.属性名=新的属性值 例如,将窗体对象frmInput的标题栏文字改为“你好!Vb” frmInput.Caption = “你好!Vb”18&&&&2.1 窗体2.窗体的方法方法是指对象具有的行为和能执行的动作。 调用对象方法的一般形式: 对象名.方法名 [参数](1)Show 和 Hide① Show方法:用来显示窗体,并把它的Visible属性设置 为True。 窗体show方法的语法:对象名.Show ② Hide方法:将窗体对象隐藏,并把它的Visible属性设 置为False。 窗体show方法的语法:对象名.Hide19&&&&2.1 窗体(2)Print用于在窗体上输出指定的内容 窗体Print方法的语法: 对象名.Print string 参数string是要在窗体上输出的文字。 例如,Form1.Print “Hello” /在窗体上显示“Hello”(3)Move用于移动窗体,并可改变其大小。 窗体Move方法的语法: 对象名.Move left,[top,[width,[height]]] 例如,Form1. Move , 2(4)Cls20用于清除运行时窗体上所生成的图形和文字 窗体Cls方法的语法:对象名.Cls&&&&2.1 窗体3、窗体的事件 (1)Load当一个窗体被加载到内存中准备显示时,引发Load事件 此事件不是由用户的操作引发,而是由操作系统发送的 由于此事件发生在所有因用户操作引发的事件之前,所以 常常在Load事件过程中进行窗体或控件的初始化工作, 如给符号常量、属性变量和一般变量赋初值。 Load事件过程的语法结构: Private Sub Form_Load() 程序段 End Sub21&&&&2.1 窗体(2)Click鼠标单击事件 Click事件过程的语法结构: Private Sub Form_Click() 程序段 End Sub 注意:窗体对象比较特殊,其事件过程名称为Form_ 事件名(),不像其他控件,由对象名_事件名组成。22&&&&2.1 窗体(3)DblClick鼠标双击事件 事件过程的语法结构: Private Sub Form_DblClick() 程序段 End Sub 此事件过程没有参数 注意:当在窗体上双击鼠标时,首先触发的是窗体的 Click事件,然后才是DblClick事件。所以如果两个事件 都编写了程序代码,则会被依次执行。23&&&&2.1 窗体(4)GotFocus、LostFocus焦点是接收用户鼠标或键盘输入的能力。 当一个对象处于焦点状态时,可接收用户的输入 例如,文本框处于焦点状态时,文本框内有闪烁的光标;命令按钮 处于焦点状态时,按钮四周有黑色的线条。 一个时刻只能有一个焦点 能够成为焦点的控件都支持GotFocus和LostFocus事件;当对象 得到焦点时,触发GotFocus事件;失去焦点时,触发LostFocus 事件24&&&&2.1 窗体(5)Resize在程序运行时,当窗体的大小发生改变或窗体刚刚显示时,会引发 此事件(6)Unload是从内存中清除一个窗体时触发的事件(7)Activate和DeActivate程序运行中,一个窗体变成活动窗口时,触发Activate事件; 另一个窗体或应用程序被激活,窗体不再是活动窗口时,触发 DeActivate25&&&&2.2 常用控件1.控件的基本属性①Name? ? ? ?所有控件都具有的属性 只能通过属性窗口更改,运行时是只读的 以字母开头,不多于40个字符,可包含字母、数字和下划线, 不能包含标点符号和空格 必须唯一,不能与其他公共对象重名,避免与关键字相同 字符串类型的属性 其值决定了控件上显示的内容②Caption? ?26&&&&2.2 常用控件③Enabled? ??决定程序运行时,控件是否响应用户的鼠标或键盘操作 取值为True(响应)或False (不响应) ,默认设置True 注意:当为False时,只是用户不能再通过鼠标或键盘操作,但 仍然可以通过程序控制该控件 决定程序运行时控件是否可见 取值为True(可见)或False (不可见) ,默认设置True Left和Top决定控件左上角在容器中的位置 Width和Height决定控件的大小④Visible? ?⑤Left, Top, Width,Height??27&&&&2.2 常用控件⑥ ⑦Font?用来改变文本的外观,如字体、字形、大小和效果等 ForeColor属性用来设置或返回控件的前景颜色(即正文颜色) BackColor属性用来设置控件上正文以外的显示区域的颜色 可获得焦点的控件都具有一个TabIndex属性 是一个整数型数字,用来决定按”Tab”键时,焦点在各个控件间 移动的顺序 通常这个顺序与控件建立的顺序相同。默认第一个建立的控件的 TabIndex属性值为0,第二个为1,以此类推。ForeColor, BackColor? ?⑧TabIndex? ? ?28&&&&2.2 常用控件2. 标签、文本框、命令按钮控件(1)标签控件主要用来显示或输出文本信息 经常用来对其他没有标题的控件(如文本框、列表框、组合框等) 说明 也可用来显示一些程序运行过程中的提示信息 此控件显示的内容不能由用户直接编辑,可通过程序修改 常用的属性:Name, Caption, Alignment, AutoSize, BorderStyle Alignment:设置文本的对齐方式: 0-左对齐(默认值),1-右对齐,2-中间对齐 AutoSize:其值决定标签控件的大小是否 随所显示内容而自动调整:True/False(默认) BorderStyle:决定标签是否有边框: 0-无边框(默认),1-有边框(固定单线框)? ? ? ? ① 29&&&&2.2 常用控件② 常用的方法与事件: ? Move方法(用于移动控件); 语法结构为: 对象名.Move left, top, width, height ? Click, DblClick事件: 注:标签对象能响应Click事件和DblClick事件,但是由于它的主要 功能是说明和输出显示,所以一般没有必要处理它的鼠标单击和双击 事件过程。 ? Change事件: 当标签显示的内容(即Caption属性的值)发生改变时会触Change 事件。 Change事件过程语法为: Private Sub object_Change()注:由于标签内容不能由用户直接编辑,所以Change事件只可能由 程序代码引发。30&&&&2.2 常用控件(2)文本框控件? 是一个文本编辑区域,用来接收用户输入的信息 ? 用户可以在该区域输入、编辑、修改和显示正文内容 ① 常用的属性: Name, Text, Alignment, Enabled, Locked,MaxLength, Multiline, PasswordChar,ScrollBars ? Text:文本框中的文本内容,可以通过为Text属性赋值来显示指定内 容,也可以通过此属性读取用户输入的内容。 ? Locked:设置是否锁住文本框的Text属性的内容。取值为 True/False(默认)。 ? MaxLength:设置文本框输入的最大字符数,该属性值为0时,不限 制输入的字符数。 ? Multiline:设置是否可以输入多行文本,取值为True/False,为Ture 时具有自动换行功能。31&&&&2.2 常用控件? PasswordChar:此属性可用来创建“密码文本框”,其值只能是 “空字符”或单个字符。为单个字符时,用来设置“密码字符”, 程序运行时,将输入到文本框中内容全部显示为该字符。 ScrollBars:当文本框的MultiLine属性值为True时, ScrollBars 属性值决定文本框有无水平或垂直滚动条; MultiLine属性值为 False时,文本框无滚动条, ScrollBars属性设置无意义。 0-无滚动条(默认值):自动换行(满一行后)+强制换行(Enter键) 1-只有水平滚动条:不能自动换行,可以强制换行 2-只有垂直滚动条:自动换行+强制换行 3-水平、垂直滚动条都有:不能自动换行,可以强制换行有选定部分的文本框 密码文本框 有滚动条的多行文本框 32?&&&&2.2 常用控件② 常用的方法与事件: ? SetFocus方法: 语法格式:对象名. SetFocus ? Change事件: 在文本框中输入新信息或在程序中改变Text属性值时,触发该事件。 ? KeyPress事件: 当文本框具有焦点时,按下任意键都会产生该事件。 ? GotFocus事件: 按下Tab键或用鼠标单击该对象使它获得焦点时触发该事件。 ? LostFocus事件: 按下Tab键或用鼠标单击其他对象使焦点离开该文本框时,触发该事件。&&&&2.2 常用控件(3)命令按钮控件 ? 用来接收用户的操作信息,触发相应的事件过程; ? 它是用户与程序进行交互的最直接的手段。 ① 常用的属性: Name, Caption, Default, Cancel, Enabled Default:设置该命令按钮是否为窗体的默认按钮,即在运 行时按回车键与单击该按钮效果相同,取值为True/False。 Cancel:设置该命令按钮是否为Cancel Button,即在运行 时按ESC键与单击该按钮效果相同,取值为True/False。 注:在一个窗体内,只允许有一个命令按钮的default属 性或Cancel属性设置为True!34&&&&2.2 常用控件(3)命令按钮控件(续) ? 常用的方法与事件: Move方法; SetFocus方法; 鼠标事件:Click, DblClick, MouseDown, MouseUp, MouseMove; 键盘事件:KeyPress, KeyDown, KeyUp; 焦点事件:GotFocus, LostFocus35&&&&第3章 数据类型、常量、变量及表达式36&&&&3.1 VB的字符集及编码规则1.标识符的命名规则(1)VB标识符由字母、数字和下划线组成,且以字母打头; (2)长度不得超过255个字符; (3)不能与VB中的关键字同名; (4)在同一个范围(作用域)内必须是唯一的。? VB的关键字是语言中保留下来的作为程序中固有含义的标识符,不 能被重新定义 VB中常用的关键字:IF, DO, GOTO, FOR, LOOP, Select, Case, Next, While, With, Sub, End, Dim, Private, Public, Static等37&&&&3.1 VB的字符集及编码规则4. 编码规则 (1)大小写——VB代码不区分字符的大小写。 (2)语句是程序的基本单位,VB中每条语句--enter键结束 (3)一行书写多条语句 ? 一行可以书写多条语句,各语句之间用冒号“:”分 隔。 例如:a=5 :b=6 : c=a+b (4)续行 ? 一行书写不完的语句,可以在该行后加上续行符(由 空格+下划线组成),然后换行书写。38&&&&3.2 数据类型表3.1 Visual Basic的标准数据类型数据类型 整型 长整型 名称 Integer Long Byte Single Double Currency Boolean Date(time) String Objiect Variant 类型符 % & 无 ! # @ 无 无 $ 无 无 前缀 int lng byt sng dbl cur bln dtm str obj vnt 所占字节数 2 4 1 4 8 8 2 8 与字符串长度有关 4 根据分配确定数值类字节型 单精度型 双精度型 货币型 逻辑型 日期型 字符型 对象型 变体型39&&&&3.2 数据类型1.数值型 ? 数值型数据一般分为整数型和实数型两类。 1)整数(Integer)? 在内存中占2个字节,取值范是-3)~+)。 实 数 ? VB中用±n[%]来表示整数,其中%为整数的类型符, 型 可以省略。如-123%、123%都表示整数。整 数 型 整型长整型字节型 单精度型 双精度型 货币型2) 长整型(Long)? 长整型数占4个字节,最大值为231-1。 ? VB中用±n&来表示长整数,其中&为长整数的类型符。如-1234&、 987654&都表示长整数。3)实数型 ? 实数型也称为实数或浮点数,是带有小数点的数。? 根据表示数据的精度的不同,分为单精度(Single)和双精度(Double)。 ?单精度数表示带有小数的实数,可以精确到7位十进制数。 ? 双精度数可以精确到15位或16位十进制数。40&&&&3.2 数据类型2.字符串型(string)? 由若干字符组成的字符序列,专门用来存放文字信息的 ?在VB中有两种类型字符串:定长字符串和变长字符串 (1)定长字符串:能够包含字符的个数是可以指定的一定数目的字符, 它在程序执行过程中其长度保持不变,如果所赋予的字符长度不够,用空 格填补;如果超出则截去超出部分。 ?字符串变量定义 Dim 字符串变量名 As string*长度 (2)变长字符串 ? 字符串的长度不确定,它的长度随着赋予的字符串的长度而变化 ? 字符串变量定义 Dim 字符串变量名 As string41&&&&3.2 数据类型3.布尔型(Boolean) ? 也称为逻辑型,只有两个值:真(True)和假(False),用2字节二进制数存储,经常用来表示逻辑判断的结果。 ?布尔型与整型或长整型转换: 当把数值型数据转换为逻辑型数据时,0会转换为Flase,其它非0值 转换为 True。 反之,当把逻辑型数据转换为数值型时,Flase转换为0,True转换 为-1。4.日期型(Date)? 任何在字面上可以被认作日期的文本都可以赋值给日期变量; ? 日期文字必须用符号“#”括起来,如#January 15,2002#,# 9:45:00 PM# 都是合法的日期型数据。5.变体型(Variant)?Variant数据类型是VB对所有未定义的变量的缺省数据类型的定义。42&&&&3.3 变量和常量1. 变量? 程序运行过程中其值可以改变的量称为变量,用于存储程 序运行时的临时数据 ? 变量由变量名和数据类型两部分组成。变量名是变量的标 识,程序通过变量名来操作变量;变量的数据类型就是确 定变量的取值范围、占用的内存空间及所能参与的运算。43&&&&3.3 变量和常量(1)变量的命名规则遵循标识符命名规则: ① 以字母开头,可以包括数字、字母和下划线; ② 不能包含标点符号; ③ 不能多于255个字符; ④ 不能与关键字重复; ⑤ 在同一作用域中,变量名不能相互重复。(2)变量声明 使用变量前,一般应先声明变量名以及变量的类型,以 使系统为变量分配内存单元。如果没有声明,则默认为变 体型数据 声明变量时可以指定变量名、变量的类型以及变量的作 用域。44&&&&3.3 变量和常量定义变量的统一语法格式如下: Public | Private | Dim | Static 变量名 [As 类型 [*字符串长度] ] 其中, “Public | Private | Dim | Static”4个关键字指定变 量的作用范围(即作用域);如果省略“As 类型”部分,定 义的是变体类型变量;当定义定长字符串变量时,需要“*字 符串长度” 部分指定字符串长度。 变量的作用域:指变量生效的范围,即能够对该变量赋值又 能读取该变量值的代码范围。在VB中,变量有三种作用域: 过程级、模块级和全局级45&&&&3.3 变量和常量① 过程级变量:又称为局部变量,作用域是定义它的过程 (包括事件过程和通用过程),也就是说它在哪个过程中 定义就只能在这个过程中使用。 定义过程级变量的语句为: Dim | Static 变量名 [As 数据类型名 [*字符串长度] ] ? 使用Dim关键字定义的过程级变量,当所在过程执行完毕, 变量就会消失,释放所占用的内存; ?使用Static定义的变量 ,被称为“静态变量”,在程序启 动时即被分配内存空间,程序结束时清除,每次过程执行完 毕变量的值仍被保留,下一次该过程被执行时变量的值仍然 可用。46&&&&3.3 变量和常量② 模块级变量:必须在模块开始的通用声明段中定义(位于 “代码”窗口的最顶部,所有过程的前面),语法格式为: Private | Dim 变量名 [As 数据类型名 [*字符串长度] ] ? 其中,关键字Private和Dim是等效的; ? 作用域是所在的模块,定义变量的这个模块中的所有过程 都可以访问该变量; ? 它在程序启动时被创建,程序结束时被清除。 ③ 程序级变量:也称为全局变量或公共变量,指在程序的所 有模块中都可以对其值进行存取的变量。 ? 必须在模块开头的通用声明段中定义,语法格式为: Public 变量名 [As 数据类型名 [*字符串长度] ] ? 在程序启动时创建,程序结束时被清除。47&&&&3.3 变量和常量用类型说明符表示变量将类型说明符放在变量名的尾部,可以表示不同的变 量,如%表示整型、&表示长整型、!表示单精度型、# 表示双精度型、@表示货币型,$表示字符型。48&&&&3.3 变量和常量变量的默认值一个变量在被定义之后,被首次赋值之前的这一段时间中具有默 认值。对于不同的数据类型,默认值不相同。 ① 数值型变量的默认值为0; ② 逻辑型变量的默认值为False; ③ 日期时间型变量的默认值为 # 0:00:00 #; ④ 变长字符串变量的默认值为空字符串 ” ”; ⑤ 定长字符串变量的默认值是全部由空格组成的字符串,空格个 数等于定长字符串的字符个数; ⑥ 对象型变量的默认值为Nothing; ⑦ 变体类型变量的默认值为Empty。49&&&&3.3 变量和常量变量的赋值与取值变量是一个内存区域,程序代码通过变量名对其进行赋值和取值 操作。变量赋值语句: [Let] 变量名 = 表达式 其中,“Let”是可以省略的关键字;“=”是赋值号,而不是等号 ;“表达式”是用运算符连接的对象属性、常量、变量、函数形 成的具有一定值的算式 例:Dim a As Integer a = 10 注意:如果要把相同的值赋给两个变量,应使用两个赋值语句,如: a = 2:b = 2 不能写成a = b= 250&&&&3.3 变量和常量2. 常量? 常量是指程序运行过程中始终保持不变的常数、字符串等 在程序代码中,以数值或字符等形式直接给出的常量。 例如:a=3.14 Text1.text=“welcome” ? 根据使用的数据类型,直接常量分为:字符串常量、 数值常量、布尔常量、日期常量。 字符型常量:“” “%&345*” 双引号括起来 的一串字符 数值常量:常数 132 3.D21 逻辑常量:True和False 日期常量:#09/21/2004# 用两个#号把表示日期和时间的 值括起来51&&&&3.4 运算符和表达式一、运算符 ?VB提供了5种类型的运算符:1.算术运算符 2.字符串运算符 3.关系运算符 4.逻辑运算符 5.布尔运算符52&&&&3.4 运算符和表达式1.算术运算符运算符 ^ * / \ Mod + - 名称 乘方 负号 乘 除 整除 取模 加 减 优先级 1 2 3 3 4 5 6 6 示例 3^2 -2 2*5 4/2 4\5 5 Mod 4 2+3 4.5-2.4 结果 9 -2 10 2 0 1 5 2.1? 整除运算和取模运算的操 作数一般为整型数,当操作 数含有小数时,先四舍五入 取整,然后再进行运算; ? 整除运算的结果取商的整 数部分;取模运算的结果取 商的余数部分。53&&&&3.4 运算符和表达式2.字符串运算符 (1)字符串连接运算符 有“&”和“+”两个,如下表所示运算符& ① 连接字符串(两个表达 式都为字符串) + ② 计算和(其中一个字符 串是数值型或两个都是 数值型)说明连接两个字符串表达式示例&Micro& & &soft“ 123 & 456 “123”& 456 &123&+&456” “123”+456 123 + 456结果&Microsoft“ “123456” “123456” &123456” 579 579区别:“&” 会自动将非字符串类型的数据转换成字符串后再连接, “+”则不能。54&&&&3.4 运算符和表达式(2)字符串比较运算符 ? 按照字符串对应字符从左到右逐个进行比较; ? 结果为真返回True;否则返回False; ? 字符的大小按计算机的机内码进行比较,英文、数字和半 角符号按ASCII码的大小进行比较,汉字和中文符号按汉 字国际码的顺序进行比较 ASCII码 例如: “A” & “B” ?结果为False “ab” & “ac” ?结果为True “ab” = “abc” ?结果为False “123” & “99” ?结果为False55&&&&3.4 运算符和表达式(3)字符串匹配运算符? 使用字符串匹配运算符Like,比较两个字符串,判断是否匹配 ,语 法为: 结果= 字符串 Like 模式 其中,“字符串”可以是任何字符串表达式,将它与“模式”进行比 较,判断它们是否匹配,结果返回True或False模板字符 ? * # 意义 通配符,代表任意一个字符 通配符,代表0个或多个字符 通配符,代表任意一个数字(0~9) 示例 “abc” Like “? bc” “abbc” Like “a*c” “a2c” Like “a#c”[多个字符] [!多个字符]方括号中包含的任意一个字符 不包含于方括号中的任意一个字符[abcd]:abcd之一 [!abcd]:不是abcd之一[a-d]:abcd之一 [!a-d]:不是abcd之一[字符1-字符2] ”字符1-字符2”范围内的任意一个字符 [!字符1-字符2] 不在”字符1-字符2”范围内的任意一个字符56&&&&3.4 运算符和表达式3.日期时间运算符 ? 日期型数据是一种特殊的数值型数据,只能进行“+”“-”运 算 ? 日期表达式的运算有三种情况:① 两个日期型数据相减,结果为两个日期相差的天数,如: #09/29/2012# - #09/20/2012# ?结果为数值型数据:9 ② 日期型数据加数值型数据,结果为日期型数据(向后推算日期),如: #09/29/2012# + 9 ?结果为日期型数据: #10/08/2012# ③ 日期型数据减数值型数据,结果为日期型数据(向前推算日期),如: #09/29/2012# - 10 ?结果为日期型数据: #09/19/2012#? 日期时间值之间比较时,较晚的日期时间大于较早的日期 时间,如:#09/29/2012# & #09/28/2012#57‘结果为True&&&&3.4 运算符和表达式4.关系运算符 ? 属于双目运算符,用来对两个表达式的值进行比较; ?比较的结果为逻辑值,如果关系成立则返回True,否则 返回False。在VB中,分别用-1和0表示True和False,下 表列出了VB中的关系运算符。关系运算符 = & 含 等于 大于 义 实 1=2 3.5 & 3.2 例 结 False True 果&=& &= && 58大于等于小于 小于等于 不等于3 &= 51.5 & 2.5 2 &= 4 4 && 5FalseTrue True True&&&&3.4 运算符和表达式5.布尔运算符(逻辑运算符)逻辑运算符 含义 优先级Not 取反 1说明实例Not T Not F T F T F T F T F And And And And Or Or Or Or T F F T T F F T结果F T T F F F T F T T F T T F F T当操作数为真时,结果为假 当操作数为假时,结果为真And与2两个操作数都为真时,结果为真Or或3两个操作数之一为真时,结果为真Xor异或3两个操作数为一真一假时,结果为真, 否则为假T Xor T F Xor T T Eqv T T Eqv F T Imp F F Imp FEqvImp等价蕴含45两个操作数同为真或假时,结果为真第一个操作数为真,第二个操作数为假 时,结果为假,其余结果为真59&&&&3.4 运算符和表达式二、表达式及运算优先级 1. 表达式 ① 表达式的组成 表达式由变量、常量、运算符、函数和圆括号按一定的 规则组成,表达式的运算结果的类型由参与运算的数据类型 和运算符共同决定。 ② 表达式的种类 根据表达式中运算符的类别可以将表达式分为算术表达 式、字符串表达式、日期表达式、关系表达式和逻辑表达式 等。60&&&&3.4 运算符和表达式③ 表达式的书写规则 ? 每个符号占1格,所有符号都必须一个一个并排写在 同一基准上,不能出现上标和下标。 例如: 23在VB中写成2^3 ? 不能按常规习惯省略的乘号*,如:2x要写成2*x。 ? 只能使用小括号(),且必须配对。 ? 不能出现非法的字符,如π。61&&&&3.4 运算符和表达式2.运算符的优先级 当表达式中存在多种运算符共存时,按如下优先级的先 后进行运算:高 高 算术运算 字符运算 关系运算 逻辑运算 字符串连接(&) 非(Not),与( And),或(Or),异或(Xor), 等价(Eqr), 蕴含(Imp) 低幂运算(^), 取负(-), 乘除(*/), 整除(\), 模运算(mod), 加减(+ -)低62&&&&3.4 运算符和表达式例3.5 求VB表达式4+2&3+5 And Not 2&3的值步骤: ① 看清楚表达式中有哪些运算符② 根据运算符的优先级进行运算 算术运算: 4+2、3+5关系运算: 6&8 、 2&3 逻辑非运算: Not True运算后6&8 And Not 2&3False And Not True False And False运算后运算后 运算后逻辑与运算: False And False63False(结果)&&&&3.4 运算符和表达式例3.7 用VB表达式表示算术表达式: 3&=x&=7 ,下面三种 表达式哪个是正确的? 3&=x And x &=7 ; 3&=x&=7 ; 3&=x Or x&=7 答案: 3&=x And x &=7代数式 表达式 1.2E-3 (a+b) / (a-b) Sqr( b*b - 4*a*c ) a / (-b) Sin(x) * Cos(x) / 2 Exp(x) + PI a &= b And b&=c 64 表3.1 VB表达式与代数式的比较&&&&3.5 类型转换1.隐式转换 ① 数值类型之间的转换? 转换规则:把整型转换为浮点类型时,存储格式转换,数值的大小 不变;把浮点型转换为整型时,小数部分要“四舍五入”为整数, 如果小数部分恰好是0.5,则要向 最近的偶数靠拢。例:Dim a1 As Integer, a2 As Integer a1 = 123.45 ?a1的值为123 a2 = 123.5 ?a2的值为124② 字符串类型与数值型之间的转换? 转换规则:所有的数值都可以转换为字符串类型;反之则不然, 只有字符串内容全部是数值信息的才可以转换为数值型。65&&&&3.5 类型转换③ 逻辑型值的转换? ? ? ? ? ? 转换规则: 由逻辑型转换为数值型时,False转换为0,True转换为-1; 由逻辑型转换为字节型时, False转换为0,True转换为255; 由数值型转换为逻辑型时,0转换为False,非0转换为True; 由逻辑型转换为字符串时,True和False分别转为为“True”和 “False”; 由字符串转换为逻辑型时,只有“True”和“False”(或其他 大小写形式),可以分别被转换为True和False。66&&&&3.5 类型转换④ 日期时间型的转换 ? 转换规则: ? 日期时间型转换为字符串时,会按日期的短格式(可以 在Windows控制面板的“区域设置”中设置)转换为相 应的字符串如: Dim s As String s = #2/1/99 8:20:00# ?字符串变量s的值为”99-2-1 8:20:00”? 表示有效时间的字符串可以转换为日期时间型值。如: Dim a As Integer a = “13:23:34”67‘日期型变量a的值为#1:23:34 PM#&&&&3.5 类型转换2. 显式转换? ? 显示转换是指使用VB提供的类型转换函数进行转换 使用类型转换函数可增强程序的可读性,并能进行强制类型转换, 避免可能出现的歧义性。函数 Cbool() Cbyte() 返回类型 Boolean Byte Cbool(0) Cbyte(123.5678) 示例 False 126 结果Ccur()Cdate() Cdbl() Cint() CLng() Csng()CurrencyDate Double Integer Long SingleCcur(234.5678)Cdate(“February 12,1969”) Cdbl(12.34) Cint(12.34) CLng(12345.45) Csng(12.342115)Currency型数值 Double型数值 12 11CStr()Cvar() CVErr()StringVariant ErrorCStr(123.456)Cvar(123&”000”) CVErr(2001)“123.456”123000 自定义错误码68&&&&3.6 常用内部函数内部函数是指VB已经定义好的函数,供用户随时调用。 VB的内部函数可以分为五类:数学函数 字符串函数 随机函数 转换函数 日期函数每个函数都带有一个或几个参数,函数对这些参数运算, 返回一个结果值,即函数值。 函数调用的格式为: 函数名(参数表) 其中,参数可以是常量、变量或表达式69&&&&3.6 常用内部函数1.数学函数:用于各种数学运算,包括三角函数、求平方根、 绝对值、对数、指数函数等。常用数学函数如下表:函 数 Sin(N) Cos(N) Atn (N) Tan (N) Abs (N) Exp (N) Log (N) Rnd (N) Sgn (N) Sqr (N) Int (N) Fix (N) 说 返回弧度的正弦 返回弧度的余弦 返回用弧度表示的反正切值 返回弧度的正切 返回数的绝对值 返回e的指定次幂 返回一个数值的自然对数 返回小于1且大于或等于0的随机数 返回数的符号值 返回数的平方根 返回不大于给定数的最大整数 返回数的整数部分 明 实例 Sin(1) Cos(1) Atn(1) Tan(1) Abs(-2.4) Exp(1) Log(1) Rnd Sgn(-100) Sqr(16) Int(3.6) Fix(-3.6) 结果 .897 .14 .448 1.9 2.4 2.05 0 0~1之间的随机数 -1 4 3 -370&&&&3.6 常用内部函数1. 数学运算函数的说明: 三角函数中,自变量以弧度为单位。如果为角度,则要 转换为弧度。如Sin 应写为Sin(30*(3.)) Int(n)与Fix(n) Int(8.6)=8 Fix(8.6)=8 Int(-8.6)=-9 Fix(-8.6)=-82.71&&&&3.6 常用内部函数2.字符串函数函数 Ltrim(C) 说 明 实例 LTrim(&??? MyName&) 结果 &MyName& 返回删除字符串左端空格后的字符串Rtrim(C)Trim(C) Left(C,N) Right(C,N) Mid(C,N1[,N2])返回删除字符串右端空格后的字符串返回删除字符串前导和尾随空格后的字符串 返回从字符串左边开始的指定数目的字符 返回从字符串右端开始的指定数目的字符 返回从字符串指定位置开始的指定数目的字符RTrim(&MyName??? &)&MyName&Trim(&??? MyName??? &MyName& &) Left(&MyName&,2) Right(&MyName&,4) Mid (&MyName&,2,3) &My& &Name& &yNa&Len(C)LenB(C) Instr([N1,]C1,C 2[,M]) *InstrRev(C1,C 2[,N1][,M])返回字符串的长度返回字符串所占字节数 返回C2在C1中首次出现的位置(从N1开始) 与Instr函数不同的是从字符串的尾部开始查找Len(&MyName=王青&)LenB(&MyName=王青&) InStr(6,&ASDFDFDFSD SF&, &DF&) InStrRev(&ASDFDFDFS DSF&, &DF&, 7)918 7 572&&&&3.6 常用内部函数2.字符串函数(续)*Replace(C,C1,C2[ ,N1][,N2][,M]) *Join(A[,D]) 在C字符串中从1或N1开始将 C2替换C1(有N2,替换N2次 ) 将数组A各元素按D(或空格 )分隔符连接为字符串变量 返回由指定数目空格字符组成 的字符串 与Join函数作用相反,将字符 串C按分隔符D(或空格)分隔 成字符数组。 返回由N个C的首字符组成的字 符串 将字符串反序排列 返回以小写字母组成的字符串 返回以大写字母组成的字符串 Replace(&ASDFDFD FSDSF&, &DF&, &*&, 2) A = Array(&ABC&, &DEF&, &GH&) Join(A, &/&) Space(5) A = Split (&ABC*DEF*GH&, &*&) String(2, &ABCD&) StrReverse(&ABCD&) LCase(&ABCabc&) UCase(&ABCabc&) AS***SDSFABC/DEF/G H &????? & A(0)= &ABC& A(1)= &DEF& A(2)=&GH& &AA& &DCBA& &abcabc& &ABCABC&Space(N) *Split(C[,D])String(N,C) *StrReverse(C) Lcase(C) Ucase(C)73&&&&3.6 常用内部函数3.日期和时间函数函数 Now Date [()] DateSerial(年,月,日) DateValue(C) Day(C|N) WeekDay(C|N) WeekDayName(C|N) Month(C|N) Monthname(N) Year(C|N) Hour(C|N) Minute(C|N) Second(C|N) Timer[$][()] Time[()] TimeSerial(时,分,秒) TimeValue(C) 说 明 Now Date() DateSerial(1,2,3) DateValue(&1,2,3&) Day(&&) WeekDay(&&) WeekDayName(3) Month(&&) Monthname(12) Year(&&) Hour(Now) Minute(Now) Second(Now) Timer Time TimeSerial (1,2,3) TimeValue(&1:2:3&) 实例 结果
5 3(星期二) 星期二 3 十二月 2002 16(由系统决定) 31(由系统决定) 42(由系统决定) 59623.44(由系统决定) 16:35:35(由系统决定) 1:02:03 1:02:03 返回系统日期和时间(yy-mm-dd hh:mm:ss) 返回当前日期(yy-mm-dd ) 返回一个日期形式 返回一个日期形式,自变量为字符串 返回月中第几天(1~31) 返回是星期几(1~7) 返回星期代号(1~7)转换为星期名称,星期日为1 返回一年中的某月(1~12) 返回月份名 返回年份(yyyy) 返回小时(0~23) 返回分钟(0~!59) 返回秒(0~59) 返回从午夜算起已过的秒数 返回当前时间(hh:mm:ss) 返回一个时间形式 返回一个时间形式,自变量为字符串&&&&第4章 基本控制结构本章重点:? 1. 结构化程序设计的三种结构 ? 2. 顺序结构--赋值语句和输入输出语句? 3. 选择结构--If语句和Swith语句? 4. 循环结构--For?Next语句、Do? Loop语句和While?Wend语句75&&&&4.1 结构化程序设计概述(1)顺序结构 (2)选择结构Y 语句1 语句1条件N语句2语句276&&&&4.1 结构化程序设计概述(3)循环结构a) 当型循环N 语句组b) 直到型循环条件 Y 语句组N条件 Y77(a)(b)&&&&4.2 顺序结构1. 赋值语句 ? 程序设计中最基本的语句,它的作用是将指定的值赋给某 个变量或对象的某个属性。 ?语句格式:名称=表达式 说明: ?名称是变量或属性的名称; ?表达式可以是算术表达式、字符串表达式、关系表达式或逻 辑表达式; ?赋值语句先计算表达式,再赋值; ?赋值号不同于数学上的等号; ?当一行中出现多条语句时,各语句之间用“:”分隔开。78&&&&4.2 顺序结构2.数据输入 ? 程序语言应具备的基本功能,指把要加工处理的原始数 据从某种外部设备(例如键盘)输入到计算机中去,以备 计算机处理; ? 在VB中,数据输入的功能可以用文本框和输入框 ( InputBox )完成; 在图形用户界面中,对话框(DialogBox)是程序与用 户交互的另一种主要途径,对话框分为两种: ? 输入框( InputBox ):可以输入信息。 ? 消息框(MsgBox):可以显示信息。?79&&&&4.2 顺序结构?InputBox函数?作用:在一对话框中显示提示信息,等待用户输入正文或按下按钮,返回文本框中内容,函数值的类型为 String类型。 ?语法格式: &变量& =InputBox(&信息内容&[,&对话框标题&] [,&默认内容&]) 说明:&信息内容&:对话框中出现的文本,用来描述“提示信息”; &对话框的标题&:设置对话框的标题; &默认内容&:输入框中显示的默认文本。 例: InputBox(&提示信息&, &标题&, &输入信 息区域&)80&&&&4.2 顺序结构例4.2 编写一个程序,计算圆的面积和周长(P78)第一步:建立用户界面 第二步:输入代码事件Private Sub cmdBegin_Click() Dim r As Single, l As Single, s As Single r = InputBox(&请输入圆的半径&) s = 3.14 * r * r l = 2 * 3.14 * r txtRadius.Text = r txtArea.Text = s txtCircum.Text = l End Sub第三步:运行程序81&&&&4.2 顺序结构3.数据输出 ? 在程序设计中,对输入的数据进行加工后,往往 需要将数据输出; ? VB中数据输出的方法有:Print方法、文本框控 件、标签控件以及消息框(MsgBox)函数;82&&&&4.2 顺序结构1.Print方法语法格式为: [&对象名&.] print [&表达式表&][{,|;}] 说明: ① 如果使用Print方法将数据输出到窗体上,应先使用Show(显示) 方法,否则输出数据不可见; ② 对象名:可选项,可以是窗体(form)、图片框(picturebox)、打印 机(printer)以及立即窗口;如果省略,则在当前窗体上输出;③ 当输出多个表达式时,各表达式之间用“,”或者“;”隔开; (逗号): 光标定位在下一个打印区的开始位置处。每个打印区占 14列。 (分号): 光标定位在上一个显示的字符后;数值型数据 后多一个空格,字符串后没有空格。 ④ 如果在语句行末尾使用 “,”,则下一个Print输出的内容将在当前 Print输出信息的下一个分区显示;如果在语句行末尾使用 “;”,则 下一个Print输出的内容将紧跟在当前Print输出信息的后面;如果 省略分隔符,则Print方法自动换行。83&&&&4.2 顺序结构2. 与Print方法有关的函数 (1)Tab函数 与Print 方法一起使用,对跟在其后的输出数据进行定位输 出。 格式: 对象名.Print Tab(n) ;输出数据说明: ① n为数值表达式,其值是一个整数; ② 计算机将光标移到由n指定的列数,从此列开始输出数据; ③ 若n小于当前位置,则自动下移到下一个输出区的第n列上; 若n小于1,则打印位置在第一列; ④ 当在一个 Print方法中有多个Tab函数时,每个Tab函数只对应其后的 一个输出项,各输入项之间用分号隔开。84&&&&4.2 顺序结构(2)Spc函数 在显示或打印列表中的下一个表达式之前插入n个空白数, n为0~32767之间的整数。Spc函数与输出项之间用分号隔开。 格式: 对象名.Print Spc(n) ;输出数据说明: ① n为数值表达式,其值为一个整数,表示在显示或打印下一个表达式 之前插入的空格数; ② 如果 n 小于输出行的宽度,则下一个打印位置将紧接在数个已打印 的空白之后;如果 n 大于输出行的宽度,则 Spc 利用下列公式计算 下一个打印位置:当前位置+ (n Mod 行宽); ③ Spc函数与Tab函数的作用类似,可以互相代替。但应注意,Tab函 数从对象的左端开始记数,而Spc函数只表示两个输出项之间的间隔。85&&&&4.2 顺序结构3. 清除方法CLS ? Cls 将清除窗体或图片框中,由图形和打印方法在运行时所 产生的图形和文本,清除后的区域以背景色填充。 语法格式: [〈对象名称〉.]Cls 说明: ① 对象名可以是Form或PictureBox,若省略“对象名”,则 默认为窗体 ② 设计时在 Form 中使用 Picture 属性设置的背景位图和放 置的控件不受 Cls 影响。86&&&&4.2 顺序结构4.消息框(MsgBox函数) MsgBox函数在对话框中显示信息,等待用户单击按钮,并返 回一个整数以标明用户单击了哪个按钮。 语法格式为:MsgBox &消息内容&[, &对话框类型&] [, &对话框标题&]说明: &消息内容&为对话框中出现的文本 &对话框类型&用来指定对话框中出现的按钮和图标,一般 有三个参数,取值见表4.1 &对话框标题&用来指定对话框的标题。 Msgbox()返回的值指明了对话框选择了哪个按钮,见表4.287&&&&表4.1 &对话框类型&设置值及其意义分组 系统常数 vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo 值 0 1 2 3 4 描述只显示确定按钮。 确定和取消按钮。 终止、重试和 忽略按钮。 是、否 和取消 按钮。 是和 否 按钮。返回按钮数目 vbOKOnlyvbRetryCancel图标类型 vbCritical vbQuestion516 32重试及 取消 按钮。显示 Critical Message(停止)图标。 显示 Warning Query(问号)图标。 显示 Warning Message(感叹号)图标。 显示 Information Message(消息)图标。 默认按钮为第一个按钮。vbExclamationvbInformation 默认按钮 vbDefaultButton1 vbDefaultButton6 默认按钮为第二个按钮。88 512 默认按钮为第三个按钮。vbDefaultButton3&&&&4.2 顺序结构表4.2 MsgBox函数的返回值系统常数 vbOK vbCancel vbAbort vbRetry vbIgnore 返回值 1 2 3 4 5 描述 确定 取消 终止 重试 忽略vbYesvbNo67是否8989&&&&4.3 选择结构一、IF语句 ?IF语句是最常用的选择结构,它是属于单条件、双分支的 选择结构; ?IF语句的传统流程图如下:假 条件成立? 真 A1块A2块?IF语句的执行过程:所给的条件如果为真,则执行A1块; 如果条件为假,则执行A2块。 ?两种形式:行IF语句和块IF语句90&&&&4.3 选择结构1.单行结构条件语句 ? 语法格式: IF &条件& Then &语句组1& [Else &语句组2& ] 2.块结构条件语句 有两种表现形式:一种是单分支,另外一种是双分支 (1) 单分支 (2)双分支结构 语法格式: 语法格式: If & 条件& Then If &条件& Then &语句组1& &语句块1& End If Else &语句块2& End If91&&&&4.3 选择结构举例(单行if语句) 例4-3-1:编写程序,任意输入一个整数,判定该 整数的奇偶性输入一个整数x假 X mod 2=0? 真 显示“偶数” 92 显示“奇数”&&&&4.3 选择结构设计步骤:(1)设计用户界面 (2)设置对象属性对象 From属性 Caption属性值 判断整数的奇偶性Label1Label2CaptionCaption请输入一个整数:空Command1 CaptionCommand2 Caption Command3 Caption Text1 93 Text判定清除 结束 空&&&&4.3 选择结构(3)编写事件代码(“判定”、“清除”和“结束”命令按 钮的事件过程) Private Sub Command1_Click() Dim x As Integer x = Val(Text1.Text) If x Mod 2 = 0 Then Label2.Caption = “偶数” Else Label2.Caption = “奇数& End SubPrivate Sub Command2_Click() Text1.Text = && End SubPrivate Sub Command3_Click() End 94 End Sub&&&&4.3 选择结构例4-3-3:将例4-3-1“判定整数的奇偶性”中命令 按钮Command1的Click事件代码改写为块If语句: Private Sub Command1_Click() Dim x As Integer x = Val(Text1.Text) If x Mod 2 = 0 Then Label2.Caption = “偶数” Else Label2.Caption = “奇数& End If End Sub95&&&&4.3 选择结构3. If语句的嵌套 (1)If语句实现嵌套(2)嵌套格式ElseIf实现选择嵌套9696&&&&4.3 选择结构例4-3-5 某百货公司为了促销,采用购物打折的优惠办法, 每位顾客一次购物: (1)1000元以上者,按九五折优惠; (2)2000元以上者,按九〇折优惠; (3)3000元以上者,按八五折优惠; (4)5000元以上者,按八〇折优惠。 编写程序,输入购物款数,计算并输出优惠价。 【分析】设购物款数为x元,优惠价为y元,则优惠付款 公式为: y=97&&&&4.3 选择结构Private Sub Command1_Click() Dim x As Single, y As Single x = Val(Text1.Text) If x & 1000 Then y=x '1000元以下不优惠 Else If x & 2000 Then y = 0.95 * x '元,九五折 Else If x & 3000 Then y = 0.9 * x '元,九折 Else If x & 5000 Then y = 0.85 * x '元,八五折 Else y = 0.8 * x '5000元以上,八折 End If End If End If End If Text2.Text = y End Sub98&&&&4.3 选择结构二、Select Case语句 ?Select Case语句用来实现多分支条件选择结构; ?多条件选择结构的特点:从多个选择条件中选择第一个 条件为真的线路作为执行路线。 ?Select Case的语法结构形式为: Select Case &测试表达式& [Case &表达式表1& &语句块1&] [Case &表达式表2& &语句块2&] … [Case Else &语句块n+1&] 99 End Select99&&&&4.3 选择结构? 用Select Case语句修改例4-3-5 中的代码。 例4-3-5 某百货公司为了促销,采用购物打折的优惠办法, 每位顾客一次购物: (1)1000元以上者,按九五折优惠; (2)2000元以上者,按九〇折优惠; (3)3000元以上者,按八五折优惠; (4)5000元以上者,按八〇折优惠。 编写程序,输入购物款数,计算并输出优惠价。 【分析】设购物款数为x元,优惠价为y元,则优惠付款 公式为: y=100&&&&4.3 选择结构使用IF语句: If x & 1000 Then y=x Else If x & 2000 Then y = 0.95 * x Else If x & 3000 Then y = 0.9 * x Else If x & 5000 Then y = 0.85 * x Else y = 0.8 * x End If End If End If End 101 IfPrivate Sub Command1_Click() Dim x As Single, y As Single x = Val(Text1.Text) Select Case x Case Is & 1000 y=x Case Is & 2000 y =0.95*x Case Is & 3000 y= 0.9*x Case Is & 5000 y= 0.85*x Case Else y= 0.8*x End Select Text2.Text = y End Sub&&&&4.4 循环结构循环的基本概念 ? 程序设计中的循环是指在程序中从某处开始有规律的反复 执行某一操作块(或程序块)的现象。 ? 被重复执行的操作块(或程序块)称为循环体,循环体的 执行与否及次数多少视循环类型与条件而定。 ? 无论何种类型的循环,共同的特点是:必须确保循环体的 重复执行能被终止(即非无限循环)。 ?在VB中的循环结构有: For…next Do…Loop While…Wend102&&&&4.4 循环结构一. For…Next语句? For…Next循环语句 一般用于循环次数已知的程序中; ? 语法形式 For &循环变量&=&初值& to &终值& [Step 步长] [语句块1] [Exit For] [语句块2] Next [&循环变量&]?说明: ① &循环变量&为必要参数,用作循环计数器的数值变量; ② &初值& to &终值&都是必要参数。&步长&可以是正数或负数。当步 长的值为1时,可以省略。 ③ 在循环中的任何位置放置任意个Exit For语句,随时退出循环(本层) ④ For与Next语句中的循环变量必须是同一变量,Next中的循环变量 可以省去。103&&&&4.4 循环结构循环变量=初值 循环变量在终值内FT循环体循环变量=循环变量+步长104For…Next语句的执行过程&&&&4.4 循环结构例4-4-1 计算阶乘n! (n的值由用户输入) 。 Private Sub Form_Click() Dim i As Integer ,n As Integer Dim a As Long n= Text1.Text ?得到输入的值n a= 1 For i = 1 To n ?For循环,每次为计数器变量i加1 a=a*i ?每次循环,变量a都乘以变量i的值 Next i Text2.Text = a End Sub105&&&&4.4 循环结构注意: ① 步长 &0 初值&终值 ,等于1 时,可省略 &0 初值&终值 =0 死循环终 值? 初 值 ? 1), ? 或 ? 0时 , 循 环 次 数 为 0 步长② 循 环 次 数? Int (106&&&&4.4 循环结构二. Do…Loop循环语句? 用于控制循环次数未知,或循环的初值和终值不明了的循环。? Do…Loop语句有两种语法形式: ? 前测型循环结构 ? 后测型循环结构107&&&&4.4 循环结构1. 前测型Do…Loop语法格式: Do { While|Until } &条件& 语句块 [Exit Do] 语句块 Loop2. 后测型Do…Loop语法格式: Do语句块 [Exit Do] 语句块 Loop { While|Until} &条件&特点: 先执行循环体,然后判断条件 ,根据条件决定是否继续执行循 环,执行循环体的最少次数为1。特点: 先判断循环条件,根据条件 决定是否执行循环体,执行循 环体的最少次数为0。使用While条件:当条件为真时执行循环体,条件为假时,终止循环108 使用Until条件 :当条件为真时终止循环,条件为假时,执行循环体&&&&4.4 循环结构(1) (2)条件T 循环体F条件 F 循环体TDo While…Loop循环执行流程 (3)Do Until…Loop循环执行流程 (4)循环体 条件 T循环体 条件 TDo …Loop Until循环执行流程FF109 Do …Loop While循环执行流程&&&&4.4 循环结构例4.9 用Do…Loop语句,计算1+2+3+….+100的值(P101)解法一: Private Sub Command1_Click() Dim s As Integer,n As Integer s=0 :n=1 Do While n&=100 Do Until n&100 s=s+n n=n+1 解法二: Loop Private Sub Command1_Click() Label1.caption=s Dim s As Integer,n As Integer End Sub s=0 :n=0 Do While n&100 Do Until n&=100 n=n+1 s=s+n Loop Label1.caption=s 110 End Sub 110&&&&4.4 循环结构三. While…Wend循环语句? While…Wend语句根据某一条件的判断,决定是否执行循环体。 ? 语法格式: While 条件 循环体 Wend ? 执行过程: 计算“条件”的值,如果“条件”为真,则执行“循环体”,否则 退出循环,执行Wend下面的语句。 ? 注意: ① “循环体”中一定要有使“条件”由“真”变为“假”的语句,否 则可能出现死循环; ② While…Wend是早期Basic语言的循环语句,现在它的功能完全被 Do…Loop所包括。111&&&&4.4 循环结构四. 循环的嵌套循环嵌套的概念:在一个循环结构中包含另外一个完整的循环结构,就 是循环嵌套 。要注意以下事项:(1) 内循环变量与外循环变量不能同名; (2) 外循环必须完全包含内循环,不能交叉; (3) 外层循环每执行一次,内层循环就要从头开始执行 一轮。112&&&&4.4 循环结构例4.13 打印输出“九九乘法表”(P105).For i = 1 To 9 For j = 1 To i For j = 1 To 9 se = i & &×& & j & &=& & i * j Picture1.Print Tab((j - 1) * 9 + 1); Next j 思考:打印三角程序如何改动? Picture1.Print Next i113&&&&4.4 循环结构五、 常用的算法算法是对某个问题求解过程的描述 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 Sum3~10的乘积t=1 For i =3 To 10 t=t*i Next i Print t114思考:若把循环体前面置各变量初值的语句放在循环体内, 程序运行时会产生什么情况?&&&&4.4 循环结构2.最小、最大值? 在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若 无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最 大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较。?例:随机产生10个100~200之间的数,求最大值。 Private Sub Command1_Click() Max = 100 For i = 1 To 10 x = Int(Rnd * 101 + 100) P If x & Max Then Max = x Next i Print Print &最大值=&; Max End Sub115115&&&&第5章本章要点:理解数组的基本概念 掌握数组的应用? 静态数组 ? 动态数组数组学会使用控件数组116&&&&5.1数组的概念一、数组和数组元素数组就是一组具有相同类型的有序的数据, 排列有序其特点 个数有限 用一个统一的名字 例如:有5个学生的成绩,这一组成绩用一个名字sc来表示 ,其中第1个学生的成绩为80 第2个学生的成绩为68 第3个学生的成绩为90 第4个学生的成绩为85 第5个学生的成绩为9,90,85,95)这一组数就是 一个数组。&&&&5.1数组的概念数组的命名:命名规则和简单变量的命名规则相同。 例如:用 mark 来代表100个学生的成绩 数组的维数:数组中下标的个数为数组的维数,根据维数的 不同,数组就分为一维数组、二维数组、三维数组等。 例如: a(10) 为一维数组 x(2,3) 为二维数组 b(4,5,6) 为三维数组 数组在内存中存放时,首先变化的是最后一维的下标,然后 变化倒数第二维的下标,以此类推。 例如:课本P114,图5.1所示。118&&&&5.1数组的概念数组元素:在同一数组中,构成该数组的元素; 每个数组元素,都可以使用数组名与下标来唯一的确定; 例如:a(6)代表数组a中第6个元素,a是数组名,6是下标。 要对某一个元素中的数据进行存取,必须指定这个元素在数 组中的序号(也称为下标); 关于下标,有以下几点需要注意: ① 下标必须用括号括起来; ② 下标可以是常量、变量或表达式; ③ 下标为整数,否则将自动取整; ④ 下标的最大值和最小值分别称为数组的上界和下界, 引用数组元素时的下标值应该在下界和上界之间,否 则系统显示“下标超出范围”的出错信息。119&&&&5.1数组的概念数组的类型 在VB中,与简单变量一样,可以声明任何基本数据类型 的数组,包括用户自定义类型和对象变量,例如:数值型 数组、字符型数组、日期型数组、布尔型数组等。 注意:一个数组中的所有元素应该具有相同的数据类型。 除了数据类型为Variant(变体)型时,各个元素能够包 含不同类型的数据。 数组的形式 在VB中,根据数组元素的个数能否变化,分为静态数组 和动态数据。 静态数组:数组元素的个数固定不变。 动态数组:数组元素的个数在运行时可以改变。120&&&&5.2 静态数组静态数组是指在声明时就已经确定了数组元素个数的数组, 数组的类型、维数和大小将不得改变。 一. 静态数组的声明 ? 数组必须先声明后使用 ? 声明静态数组的语法格式: Dim 数组名(下标1[,下标2…]) [As 类型] 说明: ① 声明了数组的名、维数、大小、类型; ② 维数:几个下标为几维数组,最多60维; ③ 下标: [下界 To ] 上界 省略下界则下界由Option Base &n&语句控制, 默认值为0; 例:Dim a(8) As Long?等同于Dim a(0 To 8) As Long,数组a有9个元素a(0)~a(8)121&&&&5.2 静态数组? Option Base语句 形式:Option Base &n&? n只能为0或1; ? 如果没有使用Option Base语句,则默认下界为0; ? 如果使用Option Base 1语句,例如: Option Base 1 Dim b(2, 1 To 3, 1 To 4)④ 每一维大小: 上界-下界+1; ⑤ 数组大小: 每一维大小的乘积 例:Dim mark(1 to 100) As Integer122&&&&5.2 静态数组例: Dim Array(3, 4) As Long 等价于: Dim Array( 0 To 3, 0 To 4) As Long共有 4×5个元素123&&&&5.2 静态数组二. 数组的基本操作使用数组就是对数组元素进行操作,对数组元素的操作 类似于对简单变量的操作。? 引用数组元素需要注意的问题: ① 引用数组元素的方法 在数组名后的括号中指明下标,例如a(5),b(3,4) 考虑:A(6) 与 A6? ② 引用数组元素时,数组名、数组类型必须与数组声明时一致; ③ 引用数组元素时,下标值应在数组声明时所指定的范围内; ④ 在同一过程中,数组与简单变量不能同名; ⑤ 一般只能逐个引用数组元素,不能一次引用整个数组。124&&&&5.2 静态数组? 与数组操作有关的几个函数1. Array函数 Array函数可方便地对数组整体赋值,但它只能给声明为 Variant的变量或仅由括号括起来的动态数组赋值。赋值后的 数组大小由赋值的个数决定。 语法格式为: &数组变量名& = Array(&数组元素值&) ? 说明: ① &数组变量名&是已经声明的变量名称,用作数组使用, 该变量必须是Variant型的; ② &数组元素值&是准备赋给数组各元素的值列表,各值之 间用逗号分开;如果不提供参数,则创建一个长度为0的 125 数组。&&&&5.2 静态数组?例如,要将1,2,3,4,5,6,7 这些值赋值给数组a, 再将a的第二个元素的值赋给另一个变量b,可使用下面的方法。Dim a b=a(2) Dim a() b=a(2) 126 ?声明一个动态数组a ?声明一个Variant的变量a a=array(1,2,3,4,5,6,7)a=array(1,2,3,4,5,6,7)&&&&5.2 静态数组2. 求数组的上界Ubound( )函数、 下界 Lbound( )函数 Ubound( )函数和Lbound( )函数分别用来确定数组某一 维的上界和下界值。 ? 使用形式如下: UBound(&数组名&[, &N&]) LBound(&数组名& [, &N&]) 其中: ? &数组名&:必选项,表示数组变量的名称; ? &N&:可选项,一般是整型常量或变量,指定返回哪一 维的上界或下界。1 表示第一维,2 表示第二维,如此等等。如果省略默认是1。127&&&&5.2 静态数组二. 数组的基本操作(续) 1. 数组元素的输入(赋初值) (1)赋值语句 Dim a(1 To 10) As String a(1)=“张三” a(2)=“李四” (2) 在运行时通过 InputBox函数输入 (3)用For循环(元素较多时) For i = 1 To 10 a(i)=0 Next i 思考:如果多维数组?128&&&&5.2 静态数组(4) Array函数 Dim b As Variant b = Array(&abc&, &def&, &67&) ?&数组名&=Array(&数组元素值&) For i = 0 To UBound(b) Print b(i); & &; Next I 思考:这里的UBound(b)=? 注意: 数组的下界由Option Base控制语句决定,上界由Array 函数括号内的参数个数决定,也可通过函数UBound获得。129&&&&5.2 静态数组【例3】设计一个5*5的方阵,其中 元素是由计算机随机生 成的小于100的整数。 Dim a(5,5) As Integer Private Sub Form_Load() Randomize For i =1 To 5 For j = 1 To 5 a(i, j) = Int(Rnd * 99)+1 Next j Next i End Sub130&&&&5.2 静态数组2. 数组的输出(可以使用Print方法、文本框、列表 框等) 【例4】输出方阵sc中的下三角元素 Dim sc(5,5) As Integer For i = 0 To 4 For j = 0 To i For j = i To 4 sc(i, j) = i * 5 + j Print sc(i, j); & &; Next j Print ' 换行 Next i思考:如何要输出上三角? 131&&&&5.2 静态数组三. 数组的应用 1. 排序问题 ? 将一组数据按照递增或递减的次序排列; ? 常用的算法:选择法、冒泡法、插入法等; (1) 选择排序法 基本思想:假设对n个数进行排序,首先从n个数中选 出最小的数,然后再从剩余的n-1个数中选出最小的数, 依此类推,进行n-1趟选择后,这n个数按照升序排列。 步骤: ① 从数组a中选出最小的数,与a(1)交换位置; ② 从a(2)~a(n)中选出最小的数,与 a(2)交换位置; ③ 依此类推,共进行n-1趟交换132&&&&5.2 静态数组例5.3 由计算机产生10个0~100之间的随机整数,使用选 择法排序,将这些数按照递增的顺序排列(P118)。 For i = 1 To 9 p=i For j = i + 1 To 10 If a(j) & a(p) Then p=j End If Next j t = a(i): a(i) = a(p): a(p) = t Next i133&&&&5.2 静态数组1. 排序问题 (2) 冒泡排序法 基本思想(升序):将两两相邻的数进行比较,将较 小的调换到前面,则一轮两两比较过后,最大数“沉” 在最后面。 步骤: ① n个数存放在a(n)中,第一趟将每相邻的两个数比 较,小的调到前面,经过n-1次两两比较后,最大 数“沉底”。放在最后的a(n)中; ② 第二趟对余下的n-1个数按上述方法比较,经n-2 次两相邻比较后,次大的数放在a(n-1)中; ③ 依此类推,共进行n-1趟比较,得到升序排列数。134&&&&5.2 静态数组将例5.3使用冒泡法排序,将这些数按照递增的顺序排列 (P119)。 For i = 1 To 9 p=i For j = 1 To 10 - i If a(j) & a(j + 1) Then t = a(i): a(i) = a(p): a(p) = t End If Next j Next i135&&&&5.3 动态数组? 动态数组指在声明数组时未给出数组的大小(省略括号中的 下标),当要使用它时,随时用ReDim语句重新指出数组大小, 但不能改变数组的类型。 ? 动态数组的声明 (1)声明一个空维数组 Dim 数组名 () As 数据类型 (2)在过程中用ReDim语句分配实际大小 ReDim 数组名(下标1[,下标2…]) 例: Private Sub Form_Load( ) Dim sArray( ) As Single … ReDim sArray(4,8) … 136 End Sub&&&&5.3 动态数组?说明: (1) 在过程中用ReDim语句分配实际的元素个数(维数和每维下 标范围)。Redim语句的格式与Dim语句相同,但是不必指 定数组的类型,数组的类型应该在声明空维数组时确定。 (2) Dim、Private、Public变量声明语句是说明性语句,可出现 在过程内或通用声明段;ReDim语句是执行语句,只能出现 在过程内。 (3) 在过程中可多次使用ReDim来改变数组的大小,也可改变数 组的维数,但数组的维数只能改变一次,由第一次出现的 ReDim语句定义的维数来决定 。 (4) 每次使用ReDim语句都会使原来数组中的值丢失,可以在 ReDim语句后加Preserve参数用来保留数组中的数据,但使 用Preserve只能改变最后一维的大小,前面几维大小不能改 变。137&&&&5.3 动态数组Private Sub Form_Click() Dim a() As Integer n = InputBox(&请输入数据的个数&) ReDim a(1 To n) Randomize … Print &排序后的数组:& For i = 1 To n - 1 For j = i + 1 To n If a(i) & a(j) Then t = a(i): a(i) = a(j): a(j) = t End If Next j Print a(i) Next i Print a(n) 138 End Sub&&&&5.4 控件数组? 控件数组是由一组相同类型的控件组成。 它们共用一个控件 名,共享同样的事件过程,建立时系统给每个元素赋一个唯一 的索引号(Index),通过返回的索引值(或下标值)区分控件数 组中的各个元素。 ? 例: Private Sub cmdName _Click(Index As Integer) … If Index=3 then ? 处理第四个命令按钮的操作 End If … End Sub139&&&&5.4 控件数组? 控件数组的建立: 1.在设计时建立控件数组: 首先,在窗体上添加一个新的控件作为控件数 组中的第1个控件,设置控件的Name属性值,为 控件命名; 第二步,使用下面方法之一创建控件数组: ?复制现有的控件 ?为控件起相同的名字 ?指定第一个控件的Index属性为0140&&&&5.4 控件数组2. 运行时添加控件数组成员 建立的步骤如下: ?在窗体上创建某控件,设置该控件的Index值为0,表示该 控件为数组,这是建立的第一个元素 ?在编程时通过Load方法添加其余的若干个元素,也可以通 过Unload方法删除某个添加的元素。 格式为: Load 控件数组名(Index) Unload 控件数组名(Index) 其中,Index为控件数组元素的下标。 ?每个新添加的控件数组通过Left和Top属性确定其在窗体的 位置,并将Visible 属性设置为True。141&&&&第6章 过程&&&&6.1 过程概述? VB中的三种过程 (1)事件过程对象事件在用户或系统发出动作时被触发,响应事 件时执行的过程为事件过程,由VB创建,用户不能增加 或删除。(2)通用过程必须由其他过程显式调用的代码块,由用户自己创 建。 子过程:不返回值 函数过程:返回一个值(3)属性过程可以用来返回和设置属性的值。143&&&&6.2.1 事件过程当用户对某一个对象发生一个动作时,Windows会通知 VB产生了一个事件,VB便自动用相应事件的名字调用该 事件过程。所以事件过程的名字在对象和代码之间建立了 联系。事件过程是依附于窗体和控件上的。 1.控件事件过程的语法格式为: Private Sub &控件名&_&事件名& ([形参表]) [&语句组&] End Sub 2.窗体事件过程的语法格式为: Private Sub Form_&事件名& ([形参表]) [&语句组&] End Sub144&&&&6.2.2 子过程当有几个不同的事件过程需要执行相同的操作时,为了简化 程序,把这些操作写入一个分离开的子过程(通用过程)中 ,并由事件过程来调用它。 例6.1 分别计算阶乘5!、6!、8!以及阶乘和5!+6!+8! 输入n Total=1: i =1i&=n?4个命令按钮的 Click事件过程中 都要用到求阶乘, 流程如右图:145NY Total=Total*i i=i+1输出n!=Total&&&&6.2.2 子过程子过程的特点:1.只能由别的过程调用2.没有返回值_只传进不传出146&&&&6.2.2 子过程1、创建子过程 ① 使用“添加过程”对话框; 步骤:打开代码编辑窗口 执行“工具” “添加过程” 打开“添加过程”对话框,输入过程名、类型和范围 单击“确定”。 ② 直接在代码编辑窗口中输入过程代码 [Private|Public][Static] Sub &子过程名& ([&形参表&]) 局部变量或常数定义 [&语句组1&] [Exit Sub] [&语句组2&] 147 End Sub&&&&6.2.2 子过程2、子过程的调用 注意:用call语句时, Call &子过程名& ([&实参表&]) 过程名后必须加括号; 省略call关键字,过 或 程名后不能加括号 &子过程名& [实参表] 常量 例: 变量 Private Sub Form_Click() 表达式 Dim a, b Public Sub Swap(x, y) a = 10 Dim t b = 20 t=x Call Swap (a, b) x=y Print &a=&;a,&,b=&; b y=t End Sub End Sub 148&&&&6.2.2 子过程例6.2 利用子过程编写计算圆面积的程序分析:子过程有一个参数——半径Public Sub cir(r) const pi=3.14159 s=pi*r^2 msgbox “圆面积为:” & s End Sub Private Sub Command1_Click() bj=Val(Text1.text) call cir(bj) End Sub149子过程&&&&6.3 函数过程1.函数过程的定义 自定义函数过程有两种方法: (1)利用“工具”菜单下的“添加过程”命令定义,生成一个函 数的框架 (2)利用代码窗口直接定义 函数过程形式: Private|Public|Static Function 函数名([形参表]) [As 类型] 局部变量或常数定义 语句块 函数名 = 表达式 [Exit Function] 函数过程体 语句块 函数名 = 表达式 End Function150&&&&6.3 函数过程2.函数过程的调用 函数过程的调用同标准函数调用,参与表达式运算。 ① 直接调用 函数过程名([参数列表]) 例如:print myreplace(“a”,”d”,”4”)② 用call语句调用,和子过程调用相同,但是vb将放弃返回值call myreplace(“a”,”g”,”e”) 或 myreplace “a”,”g”,”e”③ 无参函数的调用 函数可以没有参数,调用无参函数得到一个固定的值。 例如:Function a a=“abcd” End Function Print a151&&&&6.3 函数过程例6.3 利用函数过程编写计算圆面积的程序Public Sub cir(r) Function cir(r As Single) As const pi=3.14 Single s=pi * r ^ 2 Const pi = 3.14 MsgBox &圆面积为:& & s cir = pi * r ^ 2 End Sub End Function Private Sub Command1_Click() bj=Val(Text1.text) call cir(bj) End Sub152Private Sub Command1_Click() Dim bj As Single bj = Val(Text1.Text) MsgBox &圆面积为:& & cir(bj) End Sub&&&&6.3 函数过程3.子过程与函数过程区别: (1)函数过程名有值,有类型,在函数体内至少赋值一次; 子过程名无值,无类型,在子过程体内不能对子过程名 赋值; (2)调用时,子过程调用是一句独立的语句。 函数过程不能作为单独的语句加以调用,必须参与表达 式运算。 (3)一般当过程有一个函数值,使用函数过程较直观; 反之若过程无返回值,或有多个返回值,使用子过程较直 观。153&&&&6.4 过程的嵌套与递归调用一、过程的嵌套调用Sub Command1_Click() Sub f1(x) ……① ②Function f2(x) Function f3(x)④…③……⑤⑥……⑦Call f1(y)14 13x=f2(x)*3…12 11f2=f3(x)+310 ⑨f3=x*x⑧End SubEnd SubEnd SubEnd Sub154&&&&6.4 过程的嵌套与递归调用二、过程的递归调用Sub f1(x) … Call f1(y) End Sub Sub f1(x) … Call f2(y) Sub f2(x) … Call f1(y)End SubEnd Sub(a) 直接调用(b) 间接调用155&&&&6.4 过程的嵌套与递归调用为了避免递归调用出现“栈溢出”:① 递归过程中有终止的条件和终止时的值或某种 操作; ② 每递归调用一次,其中的参数要向终止方向收敛 。156&&&&6.5 参数传递? 过程与外界的数据传递有两种方式: ? 通过非局部变量 ? 通过参数 1、形参和实参形参是在过程定义中出现的变量名,也就是过程中的参 数列表;实参是调用过程时传递给过程的常量、变量、表达式或 数组,也就是调用过程时的参数列表。 ? 形参相当于过程级变量,参数传递相当于给变量赋值。157&&&&6.5 参数传递2、按值传递与按地址传递 在VB中,实参和形参的结合有两种方法:传值和传址 ① 传值: 形参得到的是实参的值,形参值的改变不会影响实参 的值。数据的传递是单向的! 如何实现?调用语句中的实参是常量或表达式,如果 实参是变量,则在定义过程的形参之前选用ByVal关键字, 表明该参数采用按值传递方式传递数据(例:课本P145)。 ② 传址: 形参得到的是实参的地址,形参和实参使用相同的内 存单元,当形参的值改变时,同时也改变实参的值。数据的 传递是双向的! 如何实现?调用语句中的实参为变量或数组时,定义过 程的形参之前选用ByRef关键字(例:课本P145 )158&&&&6.5 参数传递例:两个变量的交换 Sub Swap1(ByVal x%, ByVal y%) t% = x: x = y: y = t 实参 End Sub Sub Swap2(x%, y%) t% = x: x = y: y = t End SubByVal 传值 传地址a 10 xa10x 10 a 的地址形参Private Sub Command1_Click() a% = 10: b% = 20: Swap1 a, b '传值 Print &A1=&; a, &B1=&; b a = 10: b = 20: Swap2 a, b '传地址 Print &A2=&; a, &B2=&; b End Sub1,10&&&&第7章 用户界面高级编程&&&&7.1 滚动条控件? 滚动条(ScrollBar)的作用有两个: ① 附在窗体上协助观察数据或确定位置; ② 作为数据输入的工具。 ? 滚动条的类型: ① 水平滚动条(HSscrollBars) ② 垂直滚动条(VSscrollBars)161&&&&7.1 滚动条控件? 滚动条常用的属性: ? Name属性,Left、Top、Width、Height属性,Enabled、Visible属性,Value、Max、Min、LargeChange、 SmallChange属性; Value: 用来返回或设置滚动条的当前位置,其返回值始终介于 Max和Min属性值之间,包括这两个值; Max、Min:用来返回或设置滚动条所能代表的最大值和最小值 ,其取值范围为:-,默认值分别是32767和0 LargeChange:用来返回或设置单击滑块和滚动箭头之间的区 域时,滚动条控件Value属性值的改变量,取值范围是 1~32767,默认值为1; SmallChange:用来返回或设置单击滚动条箭头时,滚动条控 件Value属性值的改变量,取值范围是1~32767,默认值为1162&&&&7.1 滚动条控件? 滚动条的常用事件: ? Change事件:在程序运行过程中,每当滚动条的Value属性值发生变化 时,就会触发Change事件。 ? 引起Value属性值发生变化的原因有:拖动滚动条的滚 动框部分、单击滚动箭头、单击滚动条两端的空白区域 、在程序中通过代码改变Value属性值。 ? Scroll事件 在拖动滚动条的滚动框的过程中,触发Scroll事件。与 Scroll事件不同, Change事件是在拖动滚动条的滚动框的 动作结束后被触发。163&&&&7.2 框架控件? 框架(Frame)控件是一个左上角有标题文字的方框; ? 框架的作用:对窗体上的控件进行视觉上的分组,使窗体上的内容更有条理; ? 框架控件是容器控件,可以将其他控件添加到框架控件的内 部,通过框架对它们统一管理,对框架的操作也是对它内部 的控件的操作; ? 注意:框架内部控件应在框架所在区域内创建!164&&&&7.3 单选按钮和复选框? 单选按钮由一个圆形框的图标和标题文字组成,圆形框 中空白表示这个选择项未被选中,圆形框中有黑点表示选中 ; ? 注意:一般来说,单选按钮总是成组出现,用户在一组单选 按钮中必须选择一项,并且最多选择一项。 ? 单选按钮主要用在多个选项中由用户选择其中一个选项的情 况。 ? 复选框由一个小方框 的图标和一串文字组成,方框中有 对勾,表示这一项被选中,方框中为空白,则未选中。除此 之外,复选框还有一个选中与未选中的中间状态,这时方框 是灰色的并有对勾。 ? 使用复选框列出可供用户选择的选项,用户根据需要选定其 中一项或多项。165&&&&7.3 单选按钮和复选框? 单选按钮的主要属性: ① Alignment属性属性值为0,表示单选钮在左边,标题显示在右边(默认); 属性值为1,表示单选钮在右边,标题显示在左边; ② Value属性 属性值为Ture,表示单选钮被选定; 属性值为False,表示单选钮未被选定; ③ Style属性 属性值为0-Standard时,是标准方式; 属性值为1-Graphical时,是图形方式; ④ Enable属性 要禁用某个单选按钮,将其Enable属性设置为False。程序 运行时,此单选按钮显示为浅灰色,表示无法选取。 166&&&&7.3 单选按钮和复选框? 复选框的主要属性与单选按钮基本相同,但Value属性值不同属性值为0-Unchecked,表示复选框未被被选定(默认); 属性值为1-checked ,表示复选框被选定; 属性值为2-Grayed,表示复选框变成灰色,禁止用户选择167&&&&7.4 列表框和组合框? 提供包含一些选项和信息的列表,供用户从中选择;一、列表框(ListBox) 用于显示项目列表,从中选择一项或多项列表项; ? 任何时候都能看到多个选项; ? 如果有较多的选项,超出所画的区域而不能一次全部显示时 ,VB会自动加上垂直滚动条。 ? 列表框常用属性: ① Name属性 ② 外观:Appearance、BackColor和ForeColor、Style; Style属性:运行时是只读的。 取值为0,标准模式(默认值) 取值为1,复选框模式168&&&&7.4 列表框和组合框③ 位置:Left、Top、Width和Height ④ 字体:Font、FontName、FontSize、FontBold… ⑤ 行为:Enabled、Visible、SortedSorted属性:设置控件运行时列表中的项目是否自动按字 母表顺序排序; 取值为True:按字母顺序排列显示; 取值为False:按项目加入的先后顺序排列显示。⑥ 与列表有关的属性:List、ListIndex、ListCount、Text169&&&&7.4 列表框和组合框List属性:用于设置或返回列表中的选项。? 是一个字符型数组,存放列表框中的项目,下标从0开始,例如List1.List(1)表示列表框List1中第2项的值; ListIndex属性:用于返回选中的列表项的索引。? 如果未选中任何项,则ListIndex的值为-1; ? 如果只选了一个项目, ListIndex返回该项目的索引;多重选中时,返回焦点所在项目的索引,而不管项目是否被选 中;170&&&&7.4 列表框和组合框ListCount属性:用于返回列表框中项目的个数。? ListCount始终比最大的ListIndex值大1。Text属性:用于设置或返回列表中当前选项的文本内容。? ListCount始终比最大的ListIndex值大1;? 对于列表框而言, Text返回值与表达式List(ListIndex)的返回值相同。171&&&&7.4 列表框和组合框⑦ 列表框专有的属性:Column、MultiSelect、SelCount、Selected。 Column属性:决定控件是水平还是垂直滚动,以及如何显示 列表中的项目。 取值为0(默认值):所有项目显示为一列,项目多时自动添 加垂直滚动条; 取值为1:所有项目显示为一列,但滚动条是水平的; 取值大于1::由取值大小决定在控件的可见宽度内显示列的 数量;172&&&&7.4 列表框和组合框MultiSelect属性:用于指示是否能够在控件中进行复选以及 如何进行复选。 取值为0(缺省值):不允许复选; 取值为1:简单复选,单击鼠标左键或按空格键表示选定或取 消选定一个选项; 取值为2:扩展复选, ? 按下Ctrl键同时单击鼠标左键,表示选定或取消选定一个 选项; ? 按下Shift键同时单击鼠标左键,或按下Shift键并移动方向 键,可以从前一个选定的项扩展选择到当前选项,即选定 多个连续项。173&&&&7.4 列表框和组合框SelCount属性:返回控件中被选中项的数量。? 如果没有项被选中, SelCount属性将返回0值。Selected属性:用于在程序运行中,使用代码选定列表中的选 项。例如,List1.Selected(2)=True,表示选中了List1中的 第3项,如果为False,表示未被选中。 ? 列表框常用方法: ① AddItem方法:用于将项目添加到列表框中。格式为: 对象名. AddItem Item, Index 其中, Item为必选项,是一个字符串,用来指定添加到列表中的项目 Index为可选项,是一个整数,用来指定新添加的项目在列表 中的位置;Index为0,项目添加到第一项,以此类推。 174 如果省略,则新增项目添加到最后面。&&&&7.4 列表框和组合框② RemoveItem方法:从列表框中删除指定位置上的项目。格式为: 对象名. RemoveItem Index 其中, Index为必选项,是一个整数,表示删除的项目在列表 中的位置。 ③ Clear方法:用于清除列表中的所有项目。格式为: 对象名.Clear④ Move方法:用于移动列表框。⑤ SetFocus方法:用于将焦点移动到列表框。175&&&&7.4 列表框和组合框二、组合框(ComboBox) 组合了列表框和文本框的特性而形成的一种控件;? 兼有列表框和文本框的功能,可以像列表框一样,让用户通过鼠标选择所需的项目;也可以像文本框一样,用输入的方 式选择项目,但输入的内容不能自动添加到列表框中;? 如果用户选中列表框中的某项,该项内容自动装入文本框中;? 组合框比列表框占用屏幕空间要小。 ? 组合框常用属性: ? 列表框的属性基本上都用于组合框,有一些属性取值不同。176&&&&7.4 列表框和组合框① Style属性:取值为0,下拉组合框(默认值):显示在屏幕上的仅 是文本编辑框和一个下拉箭头按钮。 取值为1,简单组合框:列出所有的项目供用户选择, 右边没有下拉箭头按钮,列表框不能被收起和拉下,与 文本框一起显示在屏幕上; 取值为2,下拉列表框,功能与下拉组合框类似,区 别是在下拉列表框中不能输入列表框没有的选项。177&&&&7.4 列表框和组合框② Text属性:当Style为0或1时,返回或设置文本框部分的文本; 当Style为2时,返回列表框选择的项目,此时返回值总与表 达式List(ListIndex)的返回值相同。 ③ Locked属性: ? 只有组合框有此属性,列表框无此属性; ? 决定在运行时是否可以编辑文本框部分的内容, 取值为False(缺省值):可以编辑; 取值为True:锁定文本框部分,不可输入。 ④ Change事件: ? 当改变组合框文本框部分的内容时,发生Change事件; ? 仅在Style属性设置为0或1,并改变了Text属性值时才会 发生; 178 ? 可用于协调各控件间显示的数据或使它们同步。&&&&7.5 定时器控件? 定时器(Timer)控件又称为时钟控件或计时器控件,能在程序运行过程中不断地计时,当到达给定的时间间隔时,自动 地引发Timer事件; ? 通过定时器可以有规律的隔一段时间执行一次代码; ? 定时器是不可见控件,没有Visible属性,在设计时显示为一 个小时钟图标,运行时不显示此图标,通常用标签来显示 时 间; ? 定时器没有任何方法,主要有三个属性和一个Timer事件。 ? 定时器的属性: ① Name属性 ② Enable属性:决定定时器在运行时有效或无效,即是否对 事件的推移做出响应; 取值为True:打开定时器 179 取值为False:关闭定时器&&&&7.5 定时器控件③ Interval属性:返回或设置调用Timer事件的时间间隔,单位为毫秒数(ms),取值范围在1-65535之间的正整数,时间 间隔最长约为1.5min;? 如果需要屏蔽定时器,将Interval属性设置为0; ? 如果需要每0.5s产生一个定时器事件,则将Interval属性值设置为500。? 定时器的Timer事件: ? 当Enable属性值为Ture且Interval属性值大于0时,该事件以Interval属性指定的时间间隔发生;? 需要定时执行的操作放在该事件过程中完成。180&&&&7.6 图像控件和图片框控件? 图像控件(Image)和图片框控件(PictureBox)用来在窗体上显示图片。 ? 图片框是一个容器控件,可以在其中放置其他的控件,但是 图像控件不能作为容器控件; ? 常用的属性: Name属性; 外观:Appearance、BorderStyle、Picture属性; 位置:Left、Top、Width、Height属性; 行为:Enabled、Visible属性; 字体:FontName、FontSize、FontBoled、FontItalic等 属性;181&&&&7.6 图像控件和图片框控件Stretch属性(图像) 缺省值为False,图像会以原始大小显示,图像控件的 尺寸按图像的大小进行调整;值为Ture,图像控件尺寸不 变,会缩放图像尺寸来填充整个控件。 AutoSize属性(图片框) 决定图片框控件的大小是否自动改变以显示完整的图 像。默认值为False,保持控件大小不变,图像超出控件 区域的部分被裁剪掉;值为Ture,自动改变控件的大小来 与图像的大小一致。 区别:图片框不会对其显示的图像进行缩放!182&&&&7.7 菜单设计菜单的两种基本类型:下拉式菜单和弹出式菜单 菜单栏菜 单 项菜单项 热键 快捷键 子菜单标记子菜单名分隔线 菜单是一个控件,但是菜单控件只包含一个事件—Click事件}

我要回帖

更多关于 张三 李四 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信