slide1
Download
Skip this Video
Download Presentation
项目二 Visual Basic 程序设计基础

Loading in 2 Seconds...

play fullscreen
1 / 162

项目二 Visual Basic 程序设计基础 - PowerPoint PPT Presentation


  • 68 Views
  • Uploaded on

项目二 Visual Basic 程序设计基础. 【 教学目的 】1 、掌握常用的基本数据类型 2 、掌握常量和变量的应用 3 、理解 VB 常用内部函数 4 、掌握运算符和表达式的应用 5 、掌握数组的定义和使用 6 、掌握标准函数的使用 7 、掌握过程和函数的应用 【 教学重点 】 变量和常量的定义;函数、运算符、表达式的正确使用;数组的定义和使用。 【 教学难点 】 变量的定义、数组、函数的使用。. 活动一. 2.1 数据类型. 2.2 常量与变量. 2.3 运算符和表达式. 2.4 标准函数. 2.5 基本语句.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 项目二 Visual Basic 程序设计基础' - rosalia-woriega


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

项目二 Visual Basic程序设计基础

【教学目的】1、掌握常用的基本数据类型

2、掌握常量和变量的应用

3、理解VB常用内部函数

4、掌握运算符和表达式的应用

5、掌握数组的定义和使用

6、掌握标准函数的使用

7、掌握过程和函数的应用

【教学重点】变量和常量的定义;函数、运算符、表达式的正确使用;数组的定义和使用。

【教学难点】变量的定义、数组、函数的使用。

slide2

活动一

2.1 数据类型

2.2 常量与变量

2.3 运算符和表达式

2.4 标准函数

2.5 基本语句

2.6 数组

2.7 过程和函数

slide3

一、标准数据类型

2.1 数据类型

货币型是专为处理货币而设计的数据类型。用8位字节存储,小数点前有15位,小数点后有4位,其余的数字被舍去。例:[email protected]

任何在字面上可以被认作日期的文本都可以赋值给日期变量,且日期文字必须用符号“#”括起来,如#January 15,2002#,#1985-10-1 9:45:00 PM# , #3-6-93 13:20#都是合法的日期型数据。

布尔型数据只有两个值:真(True)和假(False),经常用来表示逻辑判断的结果。

一般用来保存二进制数据。

字符型数据是用双引号括起来的一串字符。一个西文字符占一个字节,一个汉字或全角字符占两个字节。分定长和变长字符型数据。例:“abcdef”

整型数是不带小数点和指数符号的数,如-123%、123%都表示整数。

它是一种特殊的、可以表示所有系统定义类型的数据类型。变体数据类型对数据的处理可以根据上下文的变化而变化, Variant数据类型是VB对所有未定义的变量的缺省数据类型的定义。

长整数用4字节二进制数存储,可以表示更大的整数,如-1234&、987654&都表示长整数。

由符号、指数和尾数组成,其指数部分用“E”(或“e”)表示。最多有7位有效数字。例:-1.234567E6

由符号、指数和尾数组成,其指数部分用“D”(或“d”)表示。最多有15位或16位有效数字。-1.112223334445556D-33

slide4

练习:

1、VB提供了哪些基本数据类型?其类型关键字是什么?其类型符又是什么?

2、如果要存储3.2345这个数值,定义哪种数据类型需要的内存容量较小?

3、数8.6787E+8写成普通的十进制数是:

A) 86787000 B) 867870000 C) 8678700 D) 8678700000

4、数2.65358979335278E-006写成普通的十进制数是:

A) 0.0000265358979335278 B) 0.00000265358979335278

C) 000265358979335278 D) 0.000000265358979335278

slide5
二、用户自定义数据类型

除了上述数据类型外,在VB中,用户可以根据需要利用Type语句定义自己的数据类型,其格式如下:

要定义的数据类型的名字。

Type 数据类型名

数据类型元素名 As 类型名

数据类型元素名 As 类型名

类型名为上述基本类型名或自定义数据类型名。

……

End Type

是自定义数据类型中的一个成员。

用户定义的数据类型又称为“记录类型”

slide6
例题:定义一个有关职工信息的自定义类型:

Client_Record类型有3个元素分别为: cltName、 cltPassword、 cltDeposit。

  • Type Client_Record
  • cltName as String*16
  • cltPassword as String*8
  • cltDeposit as Currency
  • End Type
  • 注意:
  • (1)自定义类型必须在标准模块或窗体模块的声明部分定义,在标准模块中定义时默认为全局变量(Public)。在窗体模块定义时在关键字Type前应加上Private关键字。
  • (2)自定义类型元素类型如果有字符串,则必须是定长字符串,即应该使用形式为:
  • strName As String*常数
  • 其中“常数”指明定长字符串的长度
slide7
2.2常量与变量

常量就是在程序运行过程中,其值始终保持不变的数据。Visual Basic6.0中,常量有两种:

(1)文字常量

(2)符号常量。

2.2.1 常量

1.文字常量

文字常量也就是普通常量,在程序代码中,以直接明显的形式给出的数据。

根据使用的数据类型,文字常量分为:字符串常量、数值常量、布尔常量、日期常量。

slide8

(1)字符串常量

  • 用双引号括起来的字符序列。例:“计算机”字符常量容纳的字符数(长度)最多可达65535个。
  • (2)数值常量
  • 数值常量有:字节型数、整型数、长整型数、浮点数。
  • ①字节型数、整型数、长整型数都是整型量,可以使用三种整型量:十进制整数、十六进制整数、八进制整数,只要是在该类型数合法范围之内。
  • 十进制数按常用的方法来表示,十六进制数前加“&H”,八进制数前加“&O”。
    • 1200 \'十进制数1200
    • &H333 \'十六进制数333
    • &O555 \'八进制数555
slide9

②浮点数分为单精度和双精度数。浮点数由尾数、指数符号和指数三部分组成。尾数是实数;指数符号是E;指数是整数。②浮点数分为单精度和双精度数。浮点数由尾数、指数符号和指数三部分组成。尾数是实数;指数符号是E;指数是整数。

  • 指数符号E的含义为:乘上10的幂次。例如:12.345E-6和78E3所表示的值分别为0.000012 345和78 000。定点数和浮点数可以是单精度的,也可以是双精度的。单精度数保留7位有效数字,双精度数保留15位或者16位有效数字。

(3)布尔常量

布尔常量只有两个:False(假)和True(真)。

(4)日期常量

日期常量是用#号括起来的日期文字,例:#2007-9-9#、#January 15,2002# 、 #3-6-93 13:20#。

slide10

注:VB在判断常量类型(特别是数值常量)时,有时存在多义性,也就是既可能是这种类型 又可能是那种类型。例:常量2345既可能是整型数,又可能是长整型数。在没有指明的情况下,VB将按占用内存最少的类型表示这个常数。2345被当成整数处理。为了显式地指明常数的类型,可以在常数后面加上类型说明符,分别为:%(整型)、&(长整型)、!(单精度浮点数)、#(双精度浮点数)、@(货币型)、$(字符串型)。字节、布尔、日期及变体类型没有类型说明符。

slide11

2.符号常量

 以符号形式表示的常量称为“符号常量”。

 代表常量的符号称为“常量名”。

常量名的命名规则:只能由字母、数字和下划线组成且首字符必须是字母的字符串。常量名长度不超过 255 个字符,其中的字母不区分大小写,不能使用VB中的保留字。

 自定义符号常量在使用前,应先用 Const 语句说明。

Const 语句形式如下:

Const 常量名 [As 数据类型] = 表达式

 也可以在说明时通过数据类型符号规定常量的类型。当省略“AS 类型”时,常量的类型由表达式值的类型决定。例:Const c1 As String=“这是符号常量” (字符串常量) Const day = #09/30/2003 # (日期常量)

Const pi! = 3.14159 (单精度常量)

slide12
2.2.2 变量
  • 变量是以符号形式出现在程序中,且取值可以发生变化的数据。
  • 变量的作用是在程序执行期间临时保存数值。
  • 变量有名字和数据类型。变量名是用来引用该变量所含的值的词。变量的数据类型确定变量可以存储的数据的类型。

一.变量的命名规则

(1)VB变量名只能用字母、数字和下划线组成(共37个可用字符)。

(2)VB变量名的第一个字符必须是英文字母,最后一个字符可以是类型说明符,且组成变量名的字符数不得超过255个字符。例:temp#

(3)不得使用VB的保留字或保留字后加上类型说明符来作为变量名。例:caption 和 caption$ 都是非法的。

(4)变量名在同一个范围内必须是唯一的。

(5)为了增加程序的可读性,一般在变量名前加上一个表示该变量数据类型的前缀。例:strName,intAge。

slide13
二.变量的声明

VB提供四种说明语句来显式说明变量:

Dim <变量名> As <类型> [,<变量名> As <类型> ] ···

Public <变量名> As <类型> [,<变量名> As <类型> ] ···

Private <变量名> As <类型> [,<变量名> As <类型> ] ···

Static <变量名> As <类型> [,<变量名> As <类型> ] ···

其中,Dim语句可用于说明局部变量和模块变量;Public 语句用于说明全局变量;Private 语句用于说明窗体/模块级变量;Static用于说明静态变量。

slide14

三、变量的范围

在变量的有效范围内,变量能够被程序访问,其值能够被程序调用。

VB在声明变量时指定它的作用范围。VB中的变量根据声明的方式,可以分为3类:局部(过程)变量、模块变量、全局变量。

VB应用程序的构成

VB由3种模块组成:窗体模块(Form)、标准模块(Module)、类模块(Class)。类模块这本书不介绍。

声明部分(Declaration)

窗体模块(Form)

通用过程(General Procedure)

事件过程(Even Procedure)

应用程序

声明部分

标准模块(Module)

通用过程

slide15

1、局部变量

局部变量又称过程变量,是指在过程(事件过程或通用过程)内部定义的变量,只有在该过程中的代码才能访问这个变量,不能应用于程序的其他部分。

局部变量在过程内用Dim、Static定义。

① Dim <变量名> As <类型> [,<变量名> As <类型> ] ··· 例:Dim intX As integer (定义intX为整型变量) Dim total As Single (定义total为单精度变量) Dim strName As String*10 (strName是定长字符串变量,长度为10) Dim stra1 As String (定义stra1为变长字符串变量)用一个Dim可以定义多个变量例:Dim str1 As String, str2 As String, ff As Boolean当用一个Dim语句定义多个变量时,每个变量都要用As子句声明其类型,否则该变量被看作是变体类型。例:Dim str1,str2 As String, ff,var1 As Long

slide16

②Static <变量名> As <类型> [,<变量名> As <类型> ] ··· 用在过程中定义静态变量或数组。用 Dim 声明的变量只在过程执行期间才存在,称为自动变量;而用 Static 声明的局部变量,则在整个应用程序运行期一直存在,称为静态变量。

所以每次引用Static定义的变量时,其值会继续保留,而引用Dim定义的变量时,变量值会被重新设置(数值变量会被设为0,字符串变量会被设为空)。例:Static num As Integer

Private Sub Command1_Click()

Static x As String

Dim y As String

x = x + "a"

y = y + "b"

Print "x的值为:"; x

Print "y的值为:"; y

End Sub

Private Sub Command1_Click()

Static x As Integer

Dim y As Integer

x = x + 1

y = y + 1

Print "x的值为:"; x

Print "y的值为:"; y

End Sub

当单击两次命令按钮时结果如何?

slide17

在不同的过程中可以定义相同名字的局部变量,它们之间没有任何关系。例:Private sub command1_click() Dim num1 As Integer Static ss as String

End Sub

Private sub command2_click() Dim num1 As Integer

Static ss as Integer End Sub

例:统计选票。界面如图1所示。共有三位候选人,如果同意某人,就单击一下某人的按钮,在对应的文本框中显示已得的票数。

    提示:在3个命令按钮的Click事件过程中用Static定义统计票数变量x,每单击一下命令按钮,使变量x=x+1。

slide18

2、模块变量(窗体变量和标准模块变量)

  • 模块变量是指在模块(包括窗体模块和标准模块)内部定义的变量,只在该模块中的代码才能访问这个变量,离开这个模块,此变量不起作用。例如在窗体Form1模块中定义的变量不能用于窗体Form2模块中。模块变量在模块的声明部分用Private或Dim声明。
  • Private <变量名> As <类型> [,<变量名> As <类型> ] ··· 用在模块(标准模块和窗体模块)中定义模块级变量。 例:Private x as Integer例:在窗体Form1中定义一个模块级变量Temp.方法:在Form1窗体的代码窗口的对象框中选择“通用”,并在过程框中选择“声明”,然后在代码窗口中定义变量Temp。Dim temp As String
  • 如果想在标准模块Module1中定义一个模块级变量temp,怎样做?
slide19

3、全局变量

  • 全局变量也称全程变量,可以在工程的每个模块、每个过程中使用。全局变量在标准模块的声明部分用Public或Global声明。
  • Public <变量名> As <类型> [,<变量名> As <类型> ] ··· 经过Public 关键字声明的变量是全局变量,其值可用于应用程序的所有过程。只能在标准模块的声明部分中用Public 关键字声明全局变量,例如: Public intTemp As Integer。
  • 例:定义一个全局变量temp,该变量可以在“工程1”中的所有模块中使用,如在窗体Form1和窗体Form2模块中,全局变量temp都可以使用。 方法:在标准模块的“通用”-“声明”中声明。Public temp As Integer
slide20

4、隐式声明与用Option Explicit语句强制显式声明变量

在默认状态下,VB中可以不对局部变量进行声明,此时变量类型默认为变体类型(Variant),称为隐式声明,但是这样做可能由于变量名的误写而产生不良后果。为安全起见,最好显式声明所有变量。

对于模块变量和全局变量,必须在代码窗口中用Dim和Public显示声明。

5、小结

slide21

【例】变量作用域的演示。阅读下列程序,写出各程序段Print的输出结果。【例】变量作用域的演示。阅读下列程序,写出各程序段Print的输出结果。

Option Explicit

Dim var1 As Integer

Private var2 As Integer

Private Sub Command1_Click()

var1 = 100

var2 = 300

Print var1, var2

End Sub

Private Sub Command2_Click()

Dim var1 As Integer

var1 = 50

var2 = 200

Print var1, var2

End Sub

Private Sub Command3_Click()

var2 = 400

Print var1, var2

End Sub

Private Sub Command4_Click()

Static var4 As Integer

var4 = var4 + 1

Print var4;

End Sub

Private Sub Command5_Click()

Dim var5 As Integer

var5 = var5 + 1

Print var5;

End Sub

slide22

练习:

1、下列可作为VB的变量名的是:

A) 4*delta B) Alpha C) 4abc D) abπ

2、下列可作为VB的变量名的是:

A) Filename B) A(A+B) C) 368D D) Print

slide23

上机作业:

1、在“工程1”中创建“Form1”和“Form2”两个窗体,并各在两窗体中添加一个Command1的按钮控件,Caption属性都为“打印”。执行以下步骤: (1)定义整型变量All为全局变量,字符型变量M1为Form1窗体的模块级变量,字符型变量M2为Form2窗体的模块级变量,单精度型变量L1为Form1窗体的Command1_Click过程的局部变量。

(2)在Form1的装载事件中为变量M1赋值为”06软件蓝领班”,ALL赋值为“123”;在Form2的装载事件中为变量M2赋值为“VB程序设计”。

(3)当单击Form1窗体中的Command1时,变量L1赋值为“3.14159”,在文本框Text1中显示变量All的内容,文本框Text2中显示变量L1的内容,在标签Label1中显示M1的内容;当单击Form1窗体中的Command2时,显示Form2窗体。 (4)当单击Form2窗体中的Command1时,在文本框Text1中显示变量M2的内容,在文本框Text2中显示变量All的内容。能不能在Form2窗体中引用M1变量?为什么?

slide24

2.3 运算符和表达式

  • 2.3.1 运算符

1.算术运算符

2.字符串运算符

3.比较运算符

4.逻辑运算符

slide25
1.算术运算符

算术运算符用于数学计算,VB有8个算术运算符(其中减号运算符和取负运算符形式相同),在这8个算术运算符中,只有取负“-”是单目运算符,其它均为双目运算符。表4-6按照优先级别的高低列出了算术运算符。

整除的操作数一般为整型数当操作数带小数时,首先被四舍五入为整数,再进行整除运算。

取模运算用来求余数其结果为第一个操作数整除第二个操作数所得的余数。

算术运算符

slide26
2.连接运算符

连接运算符有“&”和“+”两个,如表4-7所示

连接运算符

  “ 123 ” + “ 456 ”结果 “123456 ”  “ 123 ” & “ 456 ”结果 “123456 ”区别: + 两边必须是字符串, & 不一定  例如:  “ abcdef ” + 12345 ‘出错  “abcdef” & 12345 ’结果为 “abcdef12345 ”  “ 123 ” + 456 ‘结果为 579  “ 123 ” & 456 \' 结果为 " 123456 "

slide27
3.比较运算符

比较运算符属于双目运算符,用来对两个表达式的值进行比较,比较的结果为逻辑值,即若关系成立则返回True,否则返回False。在VB中,分别用-1和0表示True和False。表4-8列出了VB中的比较运算符。

表 比较运算符

slide28

逻辑运算符的作用是将操作数进行逻辑运算,结果是逻辑值True 或False。逻辑运算符中,除Not为单目运算符外,其他都为双目运算符。

4.逻辑运算符
2 3 2
2.3.2 表达式

1.表达式的种类

根据表达式中运算符的类别可以将表达式分为算术表达式、字符串表达式、日期表达式、关系表达式和逻辑表达式等。

2.表达式的书写规则

(1)每个符号占1格,所有符号都必须一个一个并排写在同一基准上,不能出现上标和下标。

(2)不能按常规习惯省略乘号*,如:2x要写成2*x。

(3)只能使用小括号(),且必须配对,不能用[ ]和{ }。

(4)不能出现非法的字符,如π。

(5)在数学中的判断式子:a<=x<=b,在VB中应写成:

a<=x And x<=b。

3.运算符的优先级

当表达式中存在多种运算符共存时,按如下优先级的先后进行运算:

算术运算符>连接运算符>比较运算符>逻辑运算符

slide30

练习:

1、计算下列结果:

(1)10 \ 2.4;  10 \ 3.6; 14 \ 4                                

(2)8*3+2 Mod 3 / 2      

(3)3*3>=8

(4) "EFG"<>"efg" & "abc"

(5)Not 5=4 And 5<4*2

(6)6>3*2 Or 7<>8 And 8=2*4

(7)10>12+3 And True And 2>3

(8)Not 7>2*4 Or Not 5<>2+3 And 2 Mod 4 =0

2、 根据所给条件,列出逻辑表达式A、 闰年的条件是:年号(year)能被4整除,但不能被100整除;或者能被400整除。B、 一元两次方程ax2+bx+c=0有实根的条件为a≠0,并且b2-4ac≥0C、 征兵的条件:男性(sex)年龄(age)在18—20岁之间,身高(size)在1.65米以上;或者女性年龄在16—18岁之间,身高在1.60以上。

D、分房的条件为:已婚(marrigerat),年龄(age)在26岁以上,工作年限(workingage)在5年以上。

slide31

2、\、/、Mod、*等4个算术运算符中,优先级最低的是(   )A、\           B、/        C、Mod             D、*3、不能正确表示条件“两个整型变量A和B之一为0,但不能同时为0”的布尔表达式A、A*B=0   AND  A<>B       2、\、/、Mod、*等4个算术运算符中,优先级最低的是(   )A、\           B、/        C、Mod             D、*3、不能正确表示条件“两个整型变量A和B之一为0,但不能同时为0”的布尔表达式A、A*B=0   AND  A<>B       

B、(A=0  OR  B=0)  AND   A<>BC、A=0  AND  B<>0  OR  A<>0   AND B=0D、 A*B=0  AND (A=0  OR  B=0)4、设A、B、C表示三角形的3条边,表示条件“任意两边之和大于第三边”的布尔表达式可以用(   )表示。A、A+B>=C Or A+C>=B Or B+C>=A    

B、Not(A+B<=C Or A+C<=B Or B+C<=A)C、A+B<C Or A+C<B Or B+C<A)        

D、A+B>C And A+C>B And B+C>A

slide32

【例】设计一个能够进行加、减、乘、除的简易计算器,设计界面见图3-3。程序运行后,在文本框Text1和Text2中输入操作数,然后单击运算符,则在Label1中显示相应的运算符,在Label3中显示计算结果。提示:4个运算符号命令按钮的Caption属性分别为+、-、×、÷。【例】设计一个能够进行加、减、乘、除的简易计算器,设计界面见图3-3。程序运行后,在文本框Text1和Text2中输入操作数,然后单击运算符,则在Label1中显示相应的运算符,在Label3中显示计算结果。提示:4个运算符号命令按钮的Caption属性分别为+、-、×、÷。

上机作业:

1、试验VB中三种除法运算符(/、\、Mod)的区别

在窗体上画5个标签、5个文本框和一个命令按钮。5个标签的标题分别为:”被除数”、“除数”、“浮点除(/)”、“整数除(\)”和“取模(Mod)”,把5个文本框清为空白,把命令按钮的标题设置为“执行除法运算”,如图所示。当单击命令按钮时,把第一个文本框中的内容作为被除数,第二个文本框中的内容作为除数,分别进行三种除法运算(/、\、Mod),并将结果分别显示在第三、第四、第五个文本框中。

slide33
2.4 常用内部函数

2.4.1 数学运算函数

2.4.2 字符串函数

2.4.3 判断函数

2.4.4 转换函数

2.4.5 日期和时间函数

2.4.6 随机函数

2 4 1
2.4.1数学运算函数

常用数学函数

int fix
取整函数Int和Fix
  • Int和Fix函数的作用都是取整。其语法格式为:
  • Int(x)
  • Fix(x)
  • 其中Int函数返回小于或等于X的最大整数。
  • Fix函数返回X的整数部分。例:?Int(-3.6) Fix(-3.6) Int(3.6) Fix(3.6) -4 -3 3 3
slide36
数制转换函数
  • Hex$(x)把一个十进制数转换为十六进制数。
  • Oct$(x)把一个十进制数转换为八进制数。
  • 参数x为任何有效的数值表达式。
  • 如果 x 不是一个整数,那么在执行前会先被四舍五入成最接近的整数。
slide37

1、表达式INT(8*SQR(36)*10^(-2)*10+0.5)/10的值是1、表达式INT(8*SQR(36)*10^(-2)*10+0.5)/10的值是

2 4 2
2.4.2 字符串函数

常用字符串函数

slide39

InStr()函数

  • 功能:指定一字符串在另一字符串中最先出现的位置。
  • 说明:N1、M为数值型参数,函数返回值为一整数。在字符串C1中从第N1个字符开始查找字符串C2(省略N1时从头开始找)。若找到了,则返回位置值;若找不到,则返回0。M的值为0、1或2。0为区分大小写,1为不区分大小写,2对数据库信息比较。默认为0
slide40

Len()函数

  • 格式:Len(字符串) 或 Len(变量名)
  • 功能:求字符串的长度,也可以测试变量的存储空间。
  • Left()和Right()函数
  • 格式:Left(字符串,n)、Right(字符串,n)
  • 功能:分别返回字符串左(右)边的n个字符。
  • 说明:n为数值型参数,函数返回值为一新的字符串。Left(字符串,n)函数返回字符串左边的 n个连续的字符,Right(字符串,n)函数返回字符串右边的 n个连续的字符。
slide41

Mid()函数

  • 格式:Mid(字符串,n1,n2)
  • 功能:自字符串的第n1个字符开始向右取n2个连续的字符。
  • 说明:n1、n2为数值型参数,函数返回值为一新的字符串。
  • Ltrim()、Rtrim()和Trim()函数
  • 格式:Ltrim(字符串)、Rtrim(字符串)、Trim(字符串)
  • 功能:去掉字符串左边、右边、左右边的空格。
  • 说明:函数返回值为一新的字符串。其中函数Ltrim(字符串)去掉字符串左边的空格,函数Rtrim(字符串)去掉字符串右边的空格,函数Trim(字符串)去掉字符串左右两边的空格。
slide42

String()函数

  • 格式:String(n,c)
  • 功能:返回由字符串的首字符组成的n个字符的字符串。
  • 说明:c为字符串类型的参数或者是ASCII码,n为数值型参数,函数返回值为一新的字符串。
  • Space()函数
  • 格式:Space(n)
  • 功能:产生由n个空格组成的字符串。
  • 说明:n为数值型参数,函数返回值为一个全部由空格组成的字符串。
slide43

练习:

1、Mid("ABCDEFG",2,3)

2、InStr(2, "ABCDEFG", "EF")

3、Right(“abcdefghi”,4)

4、String(4,”abc”)

5、Len(“123.4”)

6、Ucase(Left(“basic”,3))

2 4 3
2.4.3 判断函数
  • IsArray( )函数
  • 格式:IsArray(变量名)
  • 功能:判断变量是否为数组。
  • 例:
  • IsDate( )函数
  • 格式: IsDate(表达式)
  • 功能:判断表达式是否可以转换成为日期
  • 例:dim aa as string,bb as boolean
  • aa=“10-12-2007”
  • bb=IsDate(aa)
  • print bb
slide45

IsEmpty()函数

  • 格式: IsEmpty(变量)
  • 功能:判断变量是否已被初始化。
  • 例:dim aa as string,bb as integer,cc as boolean
  • cc=IsEmpty(aa)
  • cc=IsEmpty(bb)
  • aa=“kkkk”
  • cc=IsEmpty(aa)
  • IsNumeric()函数
  • 格式: IsNumeric(表达式)
  • 功能:判断表达式运算结果是否为数字。
  • 例: dim a as boolean
  • a=IsNumeric(text1.text)
  • print a
slide46

2.4.4转换函数

(1)数值转换为字符串

  • Str 函数的作用是将一个数值表达式转换为一个字符串。其语法格式为:
  • Str(X)
  • 参数X为一 Long型数值表达式,其中可包含任何有效的数值表达式。
  • 当一数字转成字符串时,总会在前头保留一空位来表示正负。如果 X 为正,返回的字符串包含一前导空格暗示有一正号。

例:Str(123) Str(-23.456)

slide47

(2)字符串转换为数值

  • Val 函数的作用是返回包含于字符串内的数字,字符串中是一个适当类型的数值。其语法格式为:
  • Val(string)

例:

Val(“-123.4”)

Val(“ 123.4”)

Val(“a123.4”)

Val(“12-3.4”)

slide48

例:Asc(“a”)

Asc(“abc”)

(3)求ASCⅡ字符代码

  • Asc 函数用来求一个字符串首字符的ASCⅡ字符代码,其语法格式为:
  • Asc(string)
  • 参数string可以是任何有效的字符串表达式。如果 string 中没有包含任何字符,则会产生运行时错误。

(4)求ASCⅡ字符

  • Chr 函数求一个ASCⅡ字符代码所对应的ASCⅡ字符 。其语法格式为:
  • Chr(charcode)
  • 参数charcode是一个用来识别某字符的 Long型数。charcode 的正常范围为 0 – 255。
  • 0 到 31 之间的数字与标准的非打印 ASCII 代码相同。例如,Chr(10) 可以返回换行字符,Chr(13)可以返回回车符。

例:Chr(65)

Chr(97)

2 4 6
2.4.6随机函数

Rnd(x)

功能:返回小于1且大于等于0的单精度随机数。

要产生某个范围内[下限,上限]的随机整数,可有下列公式:

Int(( 上限-下限+1)*Rnd())+下限

例:要产生[50,100]之间的随机整数,根据公式计算:

Int((100-50+1)*Rnd())+50

练习:按产生键,随机产生一个任意的大写字母,按转换键可将其转换成小写字母 。

Private Sub Command1_Click()

Label1.Caption = Chr(Int((Asc("Z") - Asc("A") + 1) * Rnd() + Asc("A")))

End Sub

Private Sub Command2_Click()

Label2.Caption = Chr(Asc(Label1.Caption) + 32)

End Sub

slide51

练习:

一、写出下列表达式的值:

1、Int(-3.14159) 2、Fix(-3.1415926)

3、Sgn(25) 4、Sqr(Sqr(16))

5、Abs(98-100) 6、Str(-456.67)

7、Val(“16Year”) 8、Year(“05-3-20”)

9、WeekDay(Now) 10、Asc(“ab”)

二、Rnd函数不可能产生的(   )值A、0                B、1              C、0.1234         D、0.00005三、INT(100*RND(1))产生的随机整数的闭区间是A、[0,99]          B、[1,100]            C、[0,100]             D、[1,99]

slide52

四、表达式(-1)*Sgn(-100+Int(Rnd*100))的值是(   )A、0            B、1               C、-1                 D、随机数五、产生[10,37]之间的随机整数的Visual Basic表达式是(   )A、Int(Rnd(1)*27)+10                        B、Int(Rnd(1)*28)+10C、Int(Rnd(1)*27)+11                        D、Int(Rnd(1)*28)+11六、函数Len(Str(Val(“123.4”)))的值为(  )A、11           B、5              C、6                 D、8四、表达式(-1)*Sgn(-100+Int(Rnd*100))的值是(   )A、0            B、1               C、-1                 D、随机数五、产生[10,37]之间的随机整数的Visual Basic表达式是(   )A、Int(Rnd(1)*27)+10                        B、Int(Rnd(1)*28)+10C、Int(Rnd(1)*27)+11                        D、Int(Rnd(1)*28)+11六、函数Len(Str(Val(“123.4”)))的值为(  )A、11           B、5              C、6                 D、8

上机作业

1、设 x=2732.87 y=-658.236 z=3.14159*30/180在立即窗口中试验以下函数的输出结果:Int(x),Fix(x),Int(y),Fix(y),Hex(Int(x)),Oct(Fix(x)),Abs(y),Sin(z),Cos(z)。

slide53

本章小结:

和其他编程语言一样,要编写程序,首先要掌握基础知识:数据类型、变量和常量、函数、运算符。

slide54

2.5 基本语句

编码规则

(1)VB不区分大小写

例:不管你输入 CAPTION 还是 caption,按回车键后系统都自动将它变为 Caption。

(2)将多个语句合并到同一行上

一般情况下,输入程序时要求一行一句,一句一行。但VB允许把几个语句放在一行中,各语句之间用冒号(:)隔开。

例:x=10 : y=5 : z=6

(3)一行最多为255个字符,一条语句最多含1023个字符。

(4)将单行语句分成多行

可以通过续行符(下划线 _)把程序分别放在几行中。如果一个语句行的末尾是下划线,则下一行与该行属于同一个语句行。续行符与它前面的字符之间至少要有一个空格。

例:Private Sub Form_MouseDown(Button As Integer, Shift As _

Integer, X As Single, Y As Single)

续行符

同一语句行

slide55

1、 赋值语句

赋值语句是程序设计中最基本的语句,它不但可以将指定的值赋给某个变量,而且还可以将指定的属性值赋给某个对象的属性。

赋值语句的格式:

格式1:[ Let ] 变量名=表达式 (Let可以省略)

格式2:[ Let ] [对象名.]属性名=表达式

(在格式2中,若对象名省略,则默认对象为当前窗体。)

功能:把“=”右边表达式的值赋给“=”左边的变量或对象的属性。

例:x=10 : Text1.Text=“abcd” : Text1.Text=Text2.Text

赋值语句兼有计算和赋值的双重功能,它首先计算赋值号右边<表达式>的值,然后把结果赋给左边的变量或对象的属性。

利用赋值语句给对象的属性赋值时,必须十分清楚该属性值的类型,将类型相同的数据赋给它,否则将会产生错误。

例:Caption 和 Text属性值是字符串型,则不能这样:text1.text=10

slide56

2、注释语句

为了提高程序的可读性,可以在程序的适当位置加上必要的注释,对语句的功能加以解释。VB中的注释语句以一个撇号(‘)或REM开始,其一般格式为:‘<注释内容> 或者 REM <注释内容>

注意:

1)当注释出现在一个语句行的后面时,只能用撇号作为注释符,不能使用Rem;

2)在复合语句行中,注释必须是最后一个语句,不能放在复合语句行中; 3)注释语句不能放在续行符的后面。

下列正确的Visual Basic注释语句是:

A.Dim a(10)As Integer Rem这是一个VB程序B.′这是一个VB程序Private Sub Command1_Click() …C.a=1:b=2:Rem这是一个VB程序:c=3D. If Shift = 6 And Button = 2 ThenPrint "BBBB" Rem 这是一个VB程序End If

2 6 vb

2.6 VB控制结构语句

VB的三种基本控制结构:顺序结构、选择结构、循环结构。

slide58

计算分段函数     5x+2 (x0) Y=  0 (x=0)

2.6.1 选择结构

引例:

If x<>0 Then  y=5*x+2Else  y=0End If

选择结构是一种常用的基本结构,要求我们事先想好程序运行可能的几种情形,判别不同的条件,去执行不同的程序段。在VB中由以下语句实现:

(1)IF 条件语句

(2)Select Case 情况语句

slide59

一、If条件语句

单行If语句

1、If … Then 语句(单分支结构)

格式1:If 条件 Then 语句

格式2:If 条件 Then语句块End If

False

条件

块If语句

True

语句块

功能:如果“条件”为“True” ,则执行Then 后面的语句,否则执行End If 后面的语句。

流程图

例:如果密码输入正确,则显示第二个窗体。

例:输出两数中的最小值。

slide60

True

False

条件

语句块1

语句块2

2、If … Then … Else 语句(双分支结构)

单行If语句

语句1:If 条件 Then <语句1> Else <语句2>

语句2: If 条件 Then语句块1  Else语句块2  End If

块If语句

功能:如果“条件”为“True” ,则执行Then 后面的语句,否则执行Else 后面的语句。

双分支结构

例:如果密码输入正确,则显示第二个窗体。否则弹出提示窗口,提示“密码不正确”。

slide61

例:任意输入一个整数,判断该整数的奇偶性。例:任意输入一个整数,判断该整数的奇偶性。

Private Sub Command_Click() Dim x as Integer x = val(Text1.Text) If x Mod 2 =0 then MsgBox Str(x) & “是偶数”Else MsgBox Str(x) & “是奇数”Enf ifEnd Sub

slide62

False

条件1

False

条件2

True

False

条件n

True

True

语句块1

语句块2

语句块n

语句块n+1

3、If…Then…ElseIf 语句(多分支结构)

格式:If 条件1 Then语句块1  ElseIf 条件2 Then语句块2  …   ElseIf 条件n Then

语句块n

[Else 语句块 n+1 ]  End If

多分支结构

功能:如果“条件1”为“True” ,则执行“语句块1”,否则如果“条件2”为“True”,则执行“语句块2”,……否则执行“语句块n”。

不管有几个分支,当某条件满足,执行相应的语句块,其余分支不再执行。

slide63

例:在文本框Text1中输入一个整数,然后判断该数是小于0、0和10之间、大于10

练习:

假定有以下每周工作安排:

星期一、三:讲计算机课

星期二、四:讲程序设计课

星期五:进修英语

星期六:政治学习

星期日:休息

试编写一个程序,对上述工作日程进行检索。程序运行后,要求输入一周里的某一天,程序将输出这一天的工作安排。在输入时用0~6分别代表星期日到星期六,如果输入0~6之外的数,则程序结束运行。

Private Sub Command1_Click()

Dim x As Integer

x = Val(Text1.Text)

If x < 0 Then

MsgBox “这是小于0的数"

ElseIf x < =10 Then

MsgBox “这是0和10之间的数"

Else

MsgBox "这是大于10的数"

End If

End Sub

slide64

4、If语句的嵌套

 If语句的嵌套是指 Then 或 Else后面的语句块中又包含If语句。  语句形式如下:

   If <表达式1> Then

     …   End If

   If <表达式1> Then

Else

        …   End If

If <表达式11> Then  …End If

If <表达式11> Then …End If

  If语句的嵌套注意事项:书写锯齿型; If 与End If配对。

slide65

5、IIf函数IIf 函数的功能是根据表达式的值,来返回两部分中的其中一个。

IIf函数形式是:IIf(表达式,当表达式为True时的值,当表达式为False时的值)

与If … Then … Else 语句的功能类似。

   例如,求x,y中大的数,放入Tmax变量中,语句如下:Tmax=IIf(x > y,x,y)

例如,求分段函数:

2x+3 (x<0)

Y =

4-3x (x≥0)

函数值的语句可以简单地表示为:

y=Iif(x<0,2*x+3,4-3*x)

slide66

二、Select Case语句(多分支结构语句)

本结构语句是实现多分支的另一种方法。

它的一般形式:

Select Case y Case 1,3,5,7,9 print “小于10的奇数”Case 2,4,6,8 print “小于10的偶数”Case 10 to 20 print “在10与20之间”Case Else print “其它数”End Select

Select Case <测试表达式>

Case <表达式列表1>

<语句块1>

[Case <表达式列表2>

[<语句块2>]]

[Case <表达式列表n>

[<语句块n>]]

[Case Else

[<语句块n+1>]]

End Select

slide67

形 式

示 例

说 明

(1)表达式

Case 100+a

数值或字符串表达式

(2)一组用逗号分隔的枚举值

Case 2,4,6,8

测试表达式的值等于2,4,6,8之一

(3)表达式1 To表达式2

Case 1 To 10

1 ≤测试表达式≤10

较小的值写在前面,较大的在后面

(4)Is 比较运算符 表达式

Case Is > 20

测试表达式> 20

格式说明:

(1)“测试表达式”可以是数值表达式或字符串表达式,通常为变量。

(2)“表达式列表”与“测试表达式”的类型必需相同。

(3)“表达式列表”由下表形式的表达式组成。

(4)当使用多个表达式组成列表时,表达式与表达式之间要用英文逗号“,”隔开。

slide68

例如:已知变量strC中存放了一个字符,判断该字符是字母字符、数字字符还是其他字符。  用If 多分支结构实现:

If Ucase(strC) >="A" And Ucase (strC) <="Z" Then Print strC & "是字母字符"   ElseIf strC >="0" And strC <="9" Then Print strC & "是数字字符"   Else Print strC & "其他字符"   End If

只有在 If 语句和每一个 ElseIf语句计算相同表达式时,才能用 Select Case 结构替换 If...Then...Else 结构。当条件表达式是一个变量时,采用Select Case语句比较方便,并且程序结构清楚,便于阅读和修改。

用Select Case语句实现:

Select Case strC     Case "a" To "z”,"A" To "Z"        Print strC & "是字母字符"     Case "0" To "9"        Print strC & "是数字字符"     Case Else        Print strC & "其他字符"  End Select

slide69

练习:在文本框Text1中输入一个整数,然后判断该数是小于1、1和10之间、大于10 ?(用Select Case语句)

Private Sub Command1_Click()

Dim x As Integer

x = Val(Text1.Text)

Select Case x

Case Is < 1

Text2.Text = "这是小于1的数"

Case 1 To 10

Text2.Text = "这是1....10之间的数"

Case Else

Text2.Text = "这是大于10的数"

End Select

End Sub

slide70

1.假定x的值为5,则在执行以下语句时,其输出结果为"Result"的Select Case语句是( )

A) Select Case xCase 10 To 1 Print "Result" End Select

B) Select Case xCase Is > 5, Is < 5Print "Result"End Select

C) Select Case x Case Is > 5, 1, 3 To 10 Print "Result" End Select

D) Select Case xCase 1, 3, Is > 5Print "Result"End Select

slide71

3.设有函数

r =1 (x<0)

2 (x>=0)

则下列能正确计算该函数值的语句是 ( )

A)If x<0 Then r = 1

ElseIf x>=0 Then

r=2

End If

B)If x < 0 Then r = 1

ElseIf (x >= 0) Then r=2 Else r = 1

End If

C)print(IIf(x>0,1,2))

D)r = IIf(x<0,1,2)

slide72

练习:

假定有以下每周工作安排:

星期一、三:讲计算机课

星期二、四:讲程序设计课

星期五:进修英语

星期六:政治学习

星期日:休息

试编写一个程序,对上述工作日程进行检索。程序运行后,要求输入一周里的某一天,程序将输出这一天的工作安排。在输入时用0~6分别代表星期日到星期六,如果输入0~6之外的数,则程序结束运行。

slide73

上机作业:

税务部门征收所得税,规定如下:

(1)收入在200元以内,不用交所得税;

(2)收入在200~400元内,超过200元的部分纳税3%;

(3)收入大于等于400元时,超过400元的部分纳税4%;

(4)收入大于等于5000元时,超过5000元的部分纳税5%

在文本框中输入小明的收入,然后单击命令按钮计算小明要交的所得税。

slide74

三、循环控制结构

  • 在程序中,凡是需要重复相同或相似的操作步骤,都可以使用循环结构来实现。
  • 循环结构由两部分组成:循环体:要重复执行的语句序列;循环控制部分:用于规定循环的重复条件或重复次数。
  • Visual Basic 支持的循环结构语句有:
  • For…Next (计数循环)
  • Do…Loop(Do循环)

其中计数循环常用于已知循环次数的循环,而Do循环适合于循环次数未知,只知道循环结束条件的循环。

slide75

(一)For-Next 循环语句:

如果事先已经知道循环的次数,则可使用For-Next循环语句。它的一般形式如:

循环变量=初值

For 循环变量=初值 to 终值 [Step 步长]语句块[Exit For]语句块Next 循环变量

循环体(重复执行的语句)

True

循环变量超过终值?

False

语句块

其中循环变量、初值、终值、步长都是数值型的。

Exit For

例:For I=1 to 10 step 1 Print I Next i

语句块

循环变量加步长值

slide76

说明:

(1)循环次数=Int((终值-初值)/步长)+1

(2)终值和初值的取值有以下情况:

l步长为正数时,终值应该大于初值,否则循环体不会被执行。

l步长为负数时,终值应该小于初值,否则循环体不会被执行。

l当终值等于初值时,不管步长是正数是负数,均执行一次循环体。

>0 初值<终值<0 初值>终值=0 死循环=1 可省略

步长(循环变量增量)

(3)循环变量用来控制循环过程,在循环体内可以被引用,但不应被重新赋值,否则将无法确定循环次数,同时也降低了程序的结构化程度。

(4)利用循环结构解决问题时,需要考虑清楚哪些语句应该作为循环体,循环体应该执行多少次。

slide77

例: s=0

For I=2 To 13 Step 3   s=s+i                    Next I           

Print “s=“; s

Print “i=“; i        

循环执行次数 Int((13-2)/3)+1

出了循环体输出为: I=14

slide78

例:编写程序,实现累乘:要求使用For循环求N !(N为自然数)。

Private Sub Form_Click() ‘单击窗体时执行Dim I%, f&, n% n = InputBox(“输入一个自然数:”, “输入提示”) f = 1 For i = 1 To n f = f * I Next I Print n; "! ="; fEnd Sub

slide79

练习:计算S=1+1/2+1/3+…+1/n。(n由用户输入)

n =val(InputBox(“请输入一个n"))S = 0For i = 1 To n S = S + 1/iNext iPrint S

例编写一程序,让用户输入10个数,如:-2,73,82,-76,-1,24,321,-25,89,-20;然后打印出其中的每个负数,并分别计算正数及负数的和且输出。

slide80

(二)For…Next 循环嵌套

  • 通常,把循环体内不再包含其他循环的循环结构称为单层循环。在处理某些问题时,常常要在循环体内再进行循环操作,这种情况称为多重循环,又称为循环的嵌套。如二重循环、三重循环等。
  • 多重循环的执行过程是,外层循环每执行一次,内层循环就要从头开始执行一轮。

 示例:For i=e1 To e2 [Step e3]

          • For j=d1 to d2 [Step d3]
          • …..
          • Next j
          • Next i

对于循环的嵌套,要注意以下事项:(1)内循环变量与外循环变量不能同名;(2)外循环必须完全包含内循环,不能交叉;(3)不能从循环体外转向循环体内,也不能从外循环转向内循环。

slide81

例:打印九九乘法表。

Private Sub Form_Click()

Dim i As Integer, j As Integer

For i = 1 To 9

For j = 1 To i

Print i; "*"; j; "="; i * j;

Next j

Print

Next i

End Sub

Print Tab((j - 1) * 13);

slide82

练习:在窗口中实现输出以下图形。

输出图形的代码如下:

For j = 1 To 5

Print Tab(j); ‘在第 j 列输出

For i = 1 To 6

Print "*";

Next i

Print

Next j

slide83

练习:指出下面程序的运行结果:

Private Sub Form_Click()

Dim a As Integer, i As Integer, j As Integer

a = 0

For i = 1 To 2

For j = -2 To 2

a = a + i + j

Next j

Print a;

Next i

Print

Print i, j, a

End Sub

slide84

(2)For i=1 to 2 s=1 For j=0 to i-1 s=s+s*i Next j Print s;Next IEnd

下面程序运行后的输出结果:

(1)X$=“a” : y$=“b” : z$=“c”For i=1 to 2 x$=y$ : y$=z$ : z$=x$next IPrint x$+y$+z$End

(3)For I=1 to 3 step 1 Print spc(5-I); For j=1 to 2*I-1 Print “*” Next j PrintNext i

下面程序运行时内循环总次数是:For m=1 to 3 For n=0 to m-1 Next nNext mEnd

slide85

(三)Do … Loop 循环语句

用于控制循环次数未知,根据循环条件来决定是否执行循环体。

Do循环有四种形式:

(1)Do … Loop While 循环

(2)Do … Loop Until 循环

(3)Do While … Loop 循环

(4)Do Until … Loop 循环

先执行后判断, <循环体>至少执行1次。

先判断后执行

其中Do … Loop While 和 Do While … Loop 是当条件为True 时执行循环,而Do … Loop Until 和 Do Until … Loop 是执行循环直到条件为True 时退出循环,即条件为假时执行循环体。

slide86

执行循环体

计算“条件”值

No

条件为真?

计算“条件”值

Yes

Yes

执行循环体

条件为真?

No

结束

结束

x=1Do While x<5      Print x,x=x+1Loop

Do While 条件… [Exit Do] …Loop

Do…[Exit Do]…Loop While 条件

形式2

形式1

slide87

执行循环体

计算“条件”值

Yes

条件为真?

计算“条件”值

No

No

条件为真?

执行循环体

Yes

结束

结束

x=1Do       Print x,x=x+1Loop Until x>=5

Do…[Exit Do]…Loop Until 条件

Do Until 条件…[Exit Do ]…Loop

形式3

形式4

slide88

练习:输出50 ~ 100之间不能被3整除的数,要求用Do语句的4种形式来实现。

Private Sub Form_Click() x=50 do until x>100 if x mod 3 <>0 then print x, end if x=x+1 LoopEnd Sub

slide89

练习

1、假定有以下循环结构

Do Until 条件

循环体

Loop

则正确的描述是

A)如果“条件”是一个为0的常数,则一次循环体也不执行

B)如果“条件”是一个为0的常数,则至少执行一次循环体

C)如果“条件”是一个不为0的常数,则至少执行一次循环体

D)不论“条件”是否为“真”,至少要执行一次循环体

2、以下程序段的输出结果为

x=1

y=4

Do Until y>4

x=x*y

y=y+1

Loop

Print x

A) 1 B) 4 C) 8 D) 20

slide90

3、在窗体上画一个命令按钮,然后编写如下事件过程:3、在窗体上画一个命令按钮,然后编写如下事件过程:

Private Sub Command1_Click()

x=0

Do Until x=-1

a=InputBox(“请输入a的值”)

a=Val(a)

b=InputBox (“请输入b的值”)

b=Val(b)

x=InputBox (“请输入x的值”)

x=Val(x)

a=a+b+x

Loop

Print a

End Sub

程序运行后,单击命令按钮,依次在输入对话框中输入5、4、3、2、1、-1,则输出结果为

A)2 B)3 C)14 D)15

slide91

4、在窗体上画两个文本框(其name属性分别为text1和text2)和一个命令按钮(其name属性为command1),然后编写如下事件过程:4、在窗体上画两个文本框(其name属性分别为text1和text2)和一个命令按钮(其name属性为command1),然后编写如下事件过程:

Private Sub Command1_click()

x=0

do while x<50

x=(x+2)*(x+3)

n=n+1

loop

text1.text=str(n)

text2.text=str(x)

end sub

程序运行后,单击命令按钮,在两个文本框中显示的值分别为:

A)1和0 B)2和72 C)3和50 D)4和168

slide92

本章小结:

要编写实用的程序,控制结构必须要掌握,不仅能读懂程序,还要懂得这些控制结构语句的使用。特别是三种循环控制语句的共同点与不同点。

slide93

编写程序,打印如下所示的“数字金字塔”:

1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 …… 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1

For I=1 to 9 print spc(30-3*I) for j=1 to I Print j; next j for k=I-1 to 1 step –1 Print k; next k printnext i

slide94
2.7 数组

一、数组的概念

  • 数组是一组具有相同数据类型的数据的集合,用一个统一的名字作为标识。数组中的每一个数据称一个数组元素,用数组名和该数据在数组中的序号来标识。
  • VB数组可分两类: 静态(定长)数组、动态(可变长)数组。
  • 在定义数组时已确定了数组的大小,称为静态数组。在定义数组时未给出数组的大小,省略了括号中的下标,称为动态数组。
slide95
二、静态数组的定义
  • 形式:Dim | Static | public数组名(下标1[,下标2…]) [As 类型]声明了数组的名字、维数、大小(成员数)、类型维数:几个下标为几维数组,最多60维。下标的形式: [下界 To ] 上界 ,省略下界为0 , 必须为常数。每一维大小: 上界-下界+1数组大小: 每一维大小的乘积例:Dim kk(1 to 100) As Integer

例:Dim A( 0 To 2, 0 To 3) As Long

定义一个二维数组A,共有 3×4个元素。

等价于: Dim A(2, 3) As Long

3行

4列

slide96

注意:(1) 下界缺省时默认为0 ,也可定义数组下标的缺省下界为1,使用下面语句:Option Base 1(2)下标不能是变量,下面是错误的声明:

n =Inputbox(“输入n”)Dim x(n) As Single(3)在数组声明中的下标说明了数组的整体,即每一维的大小; 而在程序其他地方出现的下标表示数组中的一个元素。 两者写法形式相同,但意义不同。 例如:Dim x(10) As Integer\' 声明了x数组有11个元素x(10)=100 \' 对x(10)这个数组元素赋值

slide97

(4)数组名不能与变量名同名。

(5)如果省略As子句,则其数据类型为Variant(变体类型),称该数组为默认数组,数组中可以存放各种不同的数据,所以默认数组也称“混合数组”。

练习:Dim a(1 to 5) as integer 数组名是什么?共有多少个元素,分别是什么?Dim a(5) as integer 数组名是什么?共有多少个元素,分别是什么?Dim a(5, 1 to 5) as integer 共有多少个元素?

Option base 1dim b(3,2) as integer 共有多少个元素?

slide98

(6)两个和数组相关的函数:Lbound(数组[,维]) 返回数组中指定维的下界值。Ubound(数组[,维]) 返回数组中指定维的上界值。

例:Private Sub Form_Click()Dim a(3,4) As IntegerPrint LBound(a,1); UBound(a,1)Print LBound(a,2); UBound(a,2)End Sub

slide99
三、动态数组的定义
  • 动态数组指在声明数组时未给出数组的大小(省略括号中的下标),当要使用它时,随时用ReDim语句重新指出数组大小。
  • 形式如下:ReDim 数组名(下标[,下标2…]) [As 类型] 例 Sub Form_Click( )Dim s( ) As Single… ReDim s(4,3 to 8)…End Sub
  • 说明: (1) Dim、Public变量声明语句是说明性语句,可出现在过程内或通用声明段;ReDim语句是执行语句,只能出现在过程内。(2) 在过程中可多次使用ReDim来改变数组的大小,但不能改变数组的数据类型。(3) ReDim中的下标可以是常量,也可以是有了确定值的变量。
slide100

(4) 每次使用ReDim语句都会使原来数组中的值丢失,可以在ReDim语句后加Preserve参数用来保留数组中的数据。

例:Private Sub Form_Click()Dim a() As Integern = 3ReDim a(n)a(1) = 4Print a(1)n = 5ReDim a(n) 改为 ReDim preserve a(n)Print a(1)End Sub

slide101
四、数组的基本操作

(一)数组的引用

数组的引用也就是对数组元素(下标变量)的引用,下标变量和简单变量用法一样,凡是可用简单变量的地方都可以用下标变量来代替。例: dim s(5) as string s(1)=“aa” s(2)=s(1) & ”bb” a=s(2) print s(1);s(2);a

注:在引用数组元素时,数组名、类型和维数必须与定义数组时一致。

slide102

(二)数组元素的输入

用For循环语句和InputBox函数输入。例: dim a(5) as string for I=0 to 5 b=inputbox(“请输入数据”) a(I)=b next i或:dim a(4) as string a(0)=“a” : a(1)=“b” : a(2)=“c” : a(3)=“d” : a(4)=“e”

练习:输入一个班30个学生的成绩,计算平均成绩,然后统计高于平均分的人数。

slide103

(三)数组元素的赋初值

(1)用For循环(如希望用户输入则配合Inputbox函数使用。)For i = 1 To 10 iA(i)=iNext i (2) Array函数 (只适用于一维数组)

格式:数组名=Array(数组元素值)Dim ib As Variant 或者 Dim ib() as Variant

ib = Array("abc", "def", "67")For i = 0 To UBound(ib)Print ib(i); " ";Next i

注意:(1)利用Array对数组各元素赋值,声明的数组是动态数组或连圆括号都可省,并且其类型只能是Variant。(2)数组的下界为零,上界由Array函数括号内的参数个数可决定,也可通过函数Ubound获得。

slide104

(四)数组元素的输出

数组元素的输出用For循环和Print方法实现。

1、输出一维数组用一个For循环语句和Print方法实现例:设有一维数组a(5),下面程序实现将数组a(5)中的数据同一行上输出: For I=0 to 5 print a(I); next I print

2、输出二维数组用双重For循环和 Print 方法实现例:设有二维数组a(3,4) ,下面程序实现将数组a(3,4)中的数据按4行5列输出:

For I=0 to 3 For j=0 to 4 print a(I,j); next j print next i

slide105

(五)数组的复制

1、复制单个数组元素,和简单变量的复制语句一样。

dim a(3),b(2,3) a(0)=0:a(1)=1:a(2)=2:a(3)=3 b(1,3)=a(3) a(0)=b(1,3)

2、使用For 循环复制整个数组:例: dim a as variant,b() as variant a=array(1,2,3,4,5,6) redim b(ubound(a)) For i = 0 To ubound(a) b(i) = a(i) Print b(i); Next i

slide106

(六)For Each … Next 语句

格式:for each 成员 In 数组 循环体[ Exit For ] …… Next [成员]

功能:对数组或集合中的每个元素重复执行一组语句。

其中va代表数组a中的每一个元素,只能是变体型变量。

例:dim a,va a=array(1,2,3,4,5) for each va in a print va; Next va

slide107

(七)实例

【例1】编写程序,把输入的10个整数按逆序输出。Private Sub Command1_Click()Dim a(10) As integer, i As Integer For i = 1 To 10      a(i) = InputBox(“请输入十个数”) Next i

For i = 10 To 1 step -1        Print a( i) Next I

End Sub

求数组中最大元素及所在下标Dim Max As Integer,iMax As IntegerMax=A(1):n=1For i = 2 To 10If A(i)>Max ThenMax=A(i)n=iEnd IfNext I

将数组中各元素交换For i =1 To 10\2t=A(i)A(i)=A(11-i)A(11-i)=tNext I

slide108

练习:

1、在窗体上画一个命令按钮(其Name属性为Command1),然后编写如下代码:Private Sub Command1_Click()Dim Arr1(10), arr2(10) As Integern=3For i = 1 To 5Arr1(i) = iarr2(n) = 2 * n + iNext iPrint arr2(n); Arr1(n) End Sub程序运行后,单击命令按钮,输出结果是 ( )

A.11 3 B.3 11 C.13 3 D.3 13

slide109

2、在窗体上画一个命令按钮(其Name属性为Command1),然后编写如下代码:Option Base 1Private Sub Command1_Click()Dim aa = Array(1, 2, 3, 4)j=1For i = 4 To 1 Step -1s = s + a(i)*jj =j * 10Next iPrint sEnd Sub运行上面的程序,单击命令按钮,其输出结果是 ( )

A.4321 B.12 C.34 D.1234

slide110

3、编程求数组中最大元素值和所在的下标及各元素之和。3、编程求数组中最大元素值和所在的下标及各元素之和。

Option base 1

Dim a as variant, max as integer, m as integer, sum as integer

Sum=0:max=0:m=0

A=array(21,15,20,19,3,17)

For i=1 to 6

sum=sum+a(i)

if a(i)>max then

max=a(i)

m=I

end if

Next I

Print “max=“;max, “m=“;m, “sum=“;sum

slide111

例:用选择法将数组排序。对于已知存放在数组中的n个数,用选择法按递增顺序排序。例:用选择法将数组排序。对于已知存放在数组中的n个数,用选择法按递增顺序排序。

排序的算法有许多,常用的有选择法、冒泡法、插入法等,最简单的是选择法。

For i = 1 To n-1

m = i

For j = i + 1 To n

If a(j) < a(m) Then

m = j

End If

Next j

t = a(i)

a(i) = a(m)

a(m) = t

Next i

Print "排序后的数据:"

For i = 1 To n

Print a(i);

Next i

Print

End Sub

Private Sub Command1_Click()

Dim a(1 to 10) As Integer

n=10

For i = 1 To n

a(i) = InputBox("请输入10个数据:")

Print a(i);

Next i

Print

slide112
五、控件数组

(一)控件数组概念

控件数组是由一组相同类型的控件组成。 它们共用一个控件名,具有相同的属性,建立时系统给每个元素赋一个唯一的索引号(Index)。控件数组共享同样的事件过程,通过返回的下标值区分控件数组中的各个元素。 例: Private Sub cmdName _Click(Index As Integer)…If Index=3 then

‘ 处理第四个命令按钮的操作End If…End Sub

slide113

作业:

1、从键盘上输入10个整数,并放入一维数组中,然后将其前5个元素与后5个元素对换,即第1个元素与第10个元素互换,第2个元素与第9个元素互换……第5个元素与第6个元素互换。分别输出数组原来各元素的值和对换后各元素的值。

2、设有如下两组数据:

A:2,8,7,6,4,28,70,25

B:79,27,32,41,57,66,78,80

编写一个程序,把上面两组数据分别读入两个数组中,然后把两个数组中对应下标的元素相加,即2+79,8+27,……25+80,并把相应的结果放入第三个数组中,最后输出第3个数组的值。

3、有一个n × m的矩阵,编写程序,找出其中最大的元素所在的行和列,并输出其值及行号和列号。

4、编写程序,建立并输出一个10X10的矩阵,该矩阵对角线元素为1,其余元素均为0。

slide114

5、某单位开运动会,共有10人参加男子100米短跑,运动员号和成绩如下:207号 14.5秒077号 15.1秒156号 14.2秒 231号 14.7秒453号 15.2秒 276号 13.9秒096号 15.7秒 122号 13.7秒339号 14.9秒 302号 14.5秒编写程序,按成绩排出名次,并按如下格式输出:名次 运动员号 成绩1 …… ……2 …… ……3 …… …… …………

10 …… ……

slide115

Dim a As Variant, b As Variant

a = Array("207", "156", "453", "096", "339", "077", "231", "276", "122", "302")

b = Array(14.5, 14.2, 15.2, 15.7, 14.9, 15.1, 14.7, 13.9, 13.7, 14.5)

For i = 0 To 8

Min = b(i)

n = i

For j = i + 1 To 9

If Min > b(j) Then

Min = b(j)

n = j

End If

Next j

t = b(i)

b(i) = b(n)

b(n) = t

t = a(i)

a(i) = a(n)

a(n) = t

Next i

Print “名次”; Tab(8); “运动员号”; Tab(20); “成绩"

For i = 0 To UBound(a)

Print i + 1; Tab(8); a(i); Tab(20); b(i)

Next i

slide116
2.8 过程和函数

过程的分类

VB的过程分为事件过程和通用过程两大类。

(1)事件过程是当发生某个事件时,对该事件作出响应的程序段,它是VB应用程序的主体。

(2)有时,多个不同的事件过程可能需要使用同一段程序代码,为此,可将这段代码独立出来,编写为一个共用的过程,这种过程通常称为通用过程,它独立于事件过程之外,可代其他事件过程调用。

    在VB中,根据过程是否返回值,通用过程又分为Sub过程和Function(函数)过程。Function过程有返回值。

slide117

一、Sub过程

1、Sub过程的定义

  • Sub过程的语法为:

[Private|Public] [Static] Sub 过程名([<形参表>])

[<语句序列>]

[Exit Sub]

[<语句序列>]

End Sub

下面是一个Sub过程的例子:

Private Sub sum(x as integer,y as integer)

dim s as integer

s = x + y

print “和为”;s

End Sub

slide118

说明:

(1)[Private|Public] 可选。声明该过程的作用范围,Private:只能被本模块中的其他过程访问,不能被其他模块中的过程访问。缺省时,过程是公有的。

(2)Static 可选。声明在该过程中定义的所有变量都是静态的。若没有指定,则在过程执行完毕以后,过程内的局部变量会消失。

(3)过程名与变量名的命名规则相同。一个过程只能有一个唯一的过程名。在同一个模块内,同一名称不能既作Sub过程名,又作Function过程名。

(4)Exit Sub语句是退出子过程语句,该语句可以出现在过程中的任一位置,在一个子过程中可以有多个Exit Sub语句。

slide119

(5)<形参表>类似于变量声明,指明从调用过程传送给被调过程的变量个数和类型,各变量之间用逗号间隔。定义时是无值的。只有在过程被调用时,与实参结合后才获得相应的值。(5)<形参表>类似于变量声明,指明从调用过程传送给被调过程的变量个数和类型,各变量之间用逗号间隔。定义时是无值的。只有在过程被调用时,与实参结合后才获得相应的值。

注意:若形参中的变量用<类型>声明了变量的数据类型,则实参中对应的变量也必须声明为相同的数据类型。

(6)过程可以无形式参数,但括号不能省。

slide120

2、Sub过程的创建

建立过程有两种方法:一是直接在代码编辑器窗口中输入过程代码,二是使用“添加过程”对话框。

  • 使用“添加过程”对话框方法如下:

(1)打开要添加过程的代码编辑器窗口。

(2)选择“工具”菜单中的“添

加过程”菜单项,打开

“添加过程”对话框。

(3)在“名称”文本框中输入

过程名,从“类型”组中

选择过程类型,从“范围”

组中选择范围。然后确定。

  • 直接在代码编辑器窗口中输入:

在代码编辑器窗口中,把光标定位在已有过程的外面,按照规定的语法格式输入过程名和参数,系统会自动产生最后一行语句End Sub。

slide121

3、Sub过程的调用

要执行一个过程,必须调用该过程。

每次调用子过程都会执行Sub与End Sub之间的语句序列。调用子过程有两种方法:

1.用Call语句调用Sub过程

格式:Call 过程名[(参数列表)]

例如: Call sum(a,b)

2.把过程名作为一个语句来使用

格式: 过程名 [参数列表]

与第一种调用方法相比,这种调用方式省略了关键字Call,去掉了“参数列表”的括号。

例如: sum a,b

说明:<参数列表>是实际参数列表,参数之间用逗号间隔。

slide122

Sub过程调用的执行过程:

Private Sub Swap(x%,y%)

Dim temp%

Temp=X

X=Y

Y=Temp

End Sub

Private Sub CmdOK()

……

Call Swap(a,b)

……

Swap a,b

End Sub

slide123

P55

例:定义一个过程,用于删除字符串中所有的空格,如果在文本框1中输入包含空格的任意字符串,单击按钮,可以在文本框2中显示不含空格的字符串。

slide124

【例】编一个求n!的子过程,然后调用它计算7!+11!-10!。【例】编一个求n!的子过程,然后调用它计算7!+11!-10!。

  • 程序如下:
    • Sub jch(n%,p&)
    • Dim i%
    • p = 1
    • For i = 1 To n
    • p = p * i
    • Next i
    • End Sub

Private Sub Form_Click()

Dim a&,b&,c&,d&

Call jch(7,a)

jch 11,b

Call jch(10,c)

d = a + b-c

Print "7!+11!-10!=";d

End Sub

slide125

4、参数传递

Visual Basic中不同模块(过程)之间数据的传递有两种方式:

  • 通过过程调用实参与形参的结合实现; 
  • 使用全局变量来实现各过程中共享数据。

1、形式参数

是指在定义通用过程时,出现在Sub或Function语句中的圆括号内的变量名,是用来接收传送给子过程的数据,形参表中的各个变量之间用逗号分隔。

2、实际参数

实际参数是指在调用Sub或Function过程时,写入子过程名或函数名后括号内的参数,其作用是将它们的数据(数值或地址)传送给Sub或Function过程与其对应的形参变量。

实参可由常量、表达式、有效的变量名、数组名(后加左、右括号,如A() )组成,实参表中各参数用逗号分隔。

slide126

3、按值传递

  • 如果在声明过程时,形参使用关键字ByVal声明,则规定了在调用此过程时,该参数将按值传递。
  • 形参得到的是实参的值,被调过程对形参的操作是在形参自己的存储单元中进行,形参值的改变不会影响实参的值。
  • 4、按地址传递
  • 如果在声明过程时,形参使用关键字ByRef声明,则规定了在调用此过程时,该参数将按地址传递,是默认方式。
  • 形参得到的是实参的地址,即形参与实参使用相同内存单元。当形参值的改变同时也改变实参的值。
slide127

例:两个变量的交换。

Sub Swap1(ByVal x%, ByVal y%)

Dim Temp%

Temp = x: x = y: y = Temp

End Sub

Sub Swap2(x%, y%)

Dim Temp%

Temp = x: x = y: y = Temp End Sub

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 Sub

slide128

传递值的执行过程如下图:

传递地址的执行过程

slide129
二、函数过程

Visual Basic函数分为内部函数和外部函数,如Str( ),val( )等,在编写程序时,只需写出函数名和相应的参数,就可得到函数值。外部函数是用户根据需要用Function关键字定义的函数过程,与子过程不同的是函数过程将返回一个值 。

slide130

1、函数过程的定义

函数过程的定义与子过程的定义很相似。不同的是,函数过程可以返回一个值,因此要在定义中加入返回值类型说明。语法格式为:

[Private|Public] [Static] Function 函数名 ( [形参表] ) [As 类型]

[<语句块>]

[<函数名>=<表达式>]

[Exit Function]

[<语句块>]

End Function

说明:

(1)As<类型>指定函数过程返回值的类型,若无“As<类型>”,缺省的数据类型为Variant。

(2)在函数过程中一般有一项赋值语句“函数过程名=表达式”。 表达式的计算结果就是函数过程要返回的值。

slide131

例:定义一个求绝对值的函数myAbs。

Public Function myAbs(a) as Single

If a >= 0 Then \' 根据参数进行判断

myAbs = a \' 返回正数和0的绝对值

Else

myAbs = -a \' 返回负数的绝对值

End If

End Function

2、函数过程的调用

函数过程调用同标准函数调用,形式:函数过程名([参数列表])

参数的用法和Sub过程一样。可以是同类型的常量、变量、表达式。

Private Sub Command1_Click()

Dim sr As Single

sr = InputBox("输入一个数,正负均可:")

Print "所输入的数其绝对值是:", myAbs(sr)

End Sub

slide132

【练习】编一个求n!的函数,然后调用它计算7!+11!-10!。【练习】编一个求n!的函数,然后调用它计算7!+11!-10!。

程序如下:

Function jch(n%) as long

Dim i%,f%

f = 1

For i = 1 To n

f = f * i

Next I

jch=f

End Function

Private Sub Form_Click()

Dim d as long

d = jch(7)+ jch(11)-jch(10)

Print "7!+11!-10!=";d

End Sub

slide133

练习:

在窗体上画一个名称为Text1的文本框,一个名称为Command1的命令按钮,然后编写如下事件过程和通用过程:

Private Sub Command1_Click()

n = Val(Text1.Text)

If n\2 = n/2 Then

f = f1(n)

Else

f = f2(n)

End If

Print f; n

End Sub

Public Function f1(ByRef x)

x=x*x

f1=x+x

End Function

Public Function f2(ByVal x)

x=x*x

f2=x+x+x

End Function

程序运行后,在文本框中输入6,然后单击命令按钮,窗体上显示的是

A) 72 36 B) 108 36 C) 72 6 D) 108 6

slide134

子过程与函数过程区别:

(1)函数过程名有值,有类型,在函数体内至少赋值一次;

子过程名无值,无类型,在子过程体内不能对子过程名赋值;

(2)调用时,子过程调用是一句独立的语句。

函数过程不能作为单独的语句加以调用,必须参与表达式运算。

(3)一般当过程有一个返回值,使用函数过程较直观;

如果有多个返回值,使用子过程较直观。可以把返回结果保存在传递的参数中。

slide135

练习:

1、要想在过程调用后返回两个结果,下面的过程定义语句合法的是:A) Sub Proc1(ByVal n,ByVal m)  B) Sub Proc1(n,ByVal m) C) Sub Proc1(n,m)  D) Sub Proc1(ByVal n,m)

2、在窗体上画一个命令按钮,然后编写如下事件过程:

Private Sub Commandl_Click ( ) Dim a As Single Dim b As Single a =5:b =4 S a,b  Print a,b

End Sub

Sub S(x As Single,y As Single)t = x

x=t/y  y=t Mod yEnd Sub

程序运行后,单击命令按钮,输出结果为( )A) 5 4 B) 1 1 C) 1.25 4 D) 1.25 1

slide136

Private Sub Command1_Click()

Dim a As Integer

A=4

For I=1 To 3

Print F(a)

Next I

End Sub

3、阅读程序:Function F(a As Integer) b = 0 Static c b = b+1 : c = c+1 f = a+b+cEnd Function运行上面的程序,单击命令按钮,输出结果为( )A) 6 B) 4 C) 4 D) 6 6 5 6 7 6 6 8 8

slide137

4、单击命令按钮时,下列程序代码的执行结果为 ( )

Public Sub Proc1(n As Integer,Byval m As Integer) n=n Mod 10

m=m\10 End Sub 

A) 12 34 B) 2 34 C) 2 3 D) 12 3

Private Sub Command1_Click() Dim x As Integer,y As Integer x=12:y=34 Call Proc1(x,y) Print x,yEnd Sub

slide138

上机作业:

1、编写1个Function过程,求数组的最大值。并在窗体的单击事件过程中调用该过程。

slide139
2.9 常用的几种标准控件
  • 1、命令按钮
  • 2、标签
  • 3、文本框
  • 4、滚动条
  • 5、简单背英语单词程序
slide140

一、命令按钮CommandButton

 [作用]:通过单击按钮,引发事件过程或确认某种信息。1、常用属性

例:窗体上有“确定”和“取消”按钮,设置“确定”按钮的Default属性为True,“取消”按钮的Cancel属性为True。(注:当前焦点不能设置在这两个按钮上)

slide141

2、事件当单击命令按钮时,通常可以启动一段程序,执行某项功能,所以命令按钮最常用的事件是Click(单击)事件。当用鼠标左键单击命令按钮时,会触发该事件的产生。可以在该事件中编写代码来处理相应的任务。2、事件当单击命令按钮时,通常可以启动一段程序,执行某项功能,所以命令按钮最常用的事件是Click(单击)事件。当用鼠标左键单击命令按钮时,会触发该事件的产生。可以在该事件中编写代码来处理相应的任务。

除此以外,命令按钮还可以接受很多事件,如:鼠标按下(MouseDown)事件、鼠标抬起(MouseUp)事件、键盘按下(KeyDown)或松开(KeyUp)事件等。

3、常用方法

命令按钮的常用方法是SetFocus方法,使用该方法可以将焦点定位在指定的命令按钮上。

其格式为: <对象名>.SetFocus

例:编写程序。要求:在窗体上创建一个文本框、两个命令按钮控件,命令按钮的标题分别设置为“隐藏”和“结束”,单击“隐藏”按钮后文本框消失,该按钮变成“显示”,单击“显示”按钮后显示出文本框,该按钮为“隐藏”,单击“结束”按钮后结束程序。

slide142

二、标签

用于显示文本(输出)信息,不能作为输入信息的界面。

1.基本属性

Name、Height、Width、Top、Left、Enabled、Visible、Font、ForeColor、BackColor等与窗体的使用相同。 

2.常用属性

(1)Caption属性:

标签的标题。标签中显示的文本只能用Caption属性来实现。

(2)Alignment属性:

设置标签中标题的对齐方式。

0(缺省)—标题在标签中左对齐;

1—右对齐;

2—居中。

slide143

(3)AutoSize属性

设置标签是否能够根据其中的标题自动调整大小。设置为True时,标签可根据其中的标题自动调整大小以把所有的文本都显示出来;设置为False(缺省)时,不论标题有多少,标签保持设计时定义的大小,超出的部分不能显示。

(4)BorderStyle属性

设置标签是否具有边框。0(缺省)—无边框;1—有边框。

(5)BackStyle属性

设置背景样式。0—标签透明;1—标签不透明。

3、标签的事件

标签有Click、DblClick、Chang等事件,但是一般情况下,标签是用来显示文本,标识不具有Caption属性的控件,不需要使用事件。

slide144

三、文本框

是一个文本编辑区域,在该区域输入,编辑和显示文本。

1、常用属性

(1)Text文本属性

在文本框中显示的正文内容存放在Text属性中。当程序运行时,用户通过键盘输入正文内容,保存在Text属性中。

文本框没有Caption属性

(2)Maxlength: 设置正文的最多字符个数, 0任意长度值。

(3) MultiLine: 是否为多行,默认一行. False

(4)ScrollBars: 当MultiLine为True时,该属性才有效,滚动条的形式。

0-None:无滚动条、1-Horizontal:水平滚动条、

2-Vertical垂直滚动条、3-Both水平和垂直滚动条。

slide145

(5)Locked: 是否可被编辑属性,False,表示为可编辑。

(6)PassWordChar属性

设置PasswordChar属性为了掩盖文本框中输入的字符。

该属性的设置只有在MultiLine设为 False才有效

(7)SelStart、SelLength和SelText属性

这三个属性是文本框中对文本的编辑属性。

SelStart:确定在文本框选中文本的起始位置。第一字符 的位置为0。若没有选择文本,则用于返回或设置文本的插入点位置,如果SelStart的值大于文本的长度,则SelStart取当前文本的长度:

SelLength:设置或返回文本框中选定的文本字符串长度(字符个数)。

SelText:设置或返回当前选定文本中的文本字符串。

这三个属性只有在运行期间才能设置。

slide146

例:0123456789 这时:SelStart=5,SelLength=4,SelText="5678"

Private Sub Command1_Click()

Text1.SelStart = 0

Text1.SelLength = Len(Text1.Text)

Print Text1.SelText

End Sub

2、常用方法

SetFocus方法:该方法是将光标移动到指定的文本框中,使其获得焦点。这是文本框比较常用的方法,当在窗体中建立了多个文本框后,可以使用该方法把光标置于所需要的文本框上。

slide147

3、常用事件

(1)Change事件:当改变文本框的Text属性时(用户向文本框中输入新的文本,或在程序中对文本框的Text属性进行更改),将触发其Change事件。

Private Sub Text1_Change() Static x As Integer x = x + 1 Text2.Text = Str(x) End Sub

(2)GotFocus事件:对象获得焦点事件。当运行程序时用Tab键或用鼠标选择对象,或用SetFocus方法使光标定位在对象上时,会触发该事件。

通常我们在Text控件获得输入焦点时全选它的内容,方便用户直接修改数据。

代码如下:

Private Sub Text1_GotFocus() Text1.SelStart=0 Text1.SelLength=Len(Text1.Text) End Sub

slide148

(3)KeyPress事件

当用户按下并释放键盘上一个ANSI键时,就会触发一次该事件,并返回一个KeyAscii参数(字符的Ascii值)到该事件过程中。

例如:

Private Sub Text1_KeyPress(KeyAscii As Integer)

Print KeyAscii, Chr(KeyAscii)

End Sub

当程序运行后中输入ABCD,则在窗体上在输出结果是?

(4)LostFocus事件:对象失去焦点事件。当按下Tab键或用鼠标选择其他对象使光标离开当前对象时触发该事件。

例:用LostFocus事件过程检查文本框的内容是否符合要求。

Private Sub Text1_LostFocus()

If Text1.Text = “” Then MsgBox “该文本框不能为空”Text1.SetFocus End If End Sub

slide149

:要求输入合法的数字数据。当输入结束时(按Tab键),对于输入正确的数据,显示正确信息;对输入的非数字数据,则显示错误信息并清除文本框中的内容,使焦点重新回到文本框。Text1_ LostFocus :当输入结束按Tab键时,该事件激发IsNumeric(Text1) : 函数,判断是否输入非数字数据.  Text1.SetFocus : 使焦点重新回到文本框

slide150
四、滚动条

滚动条控件(ScrollBar)分为水平滚动条(HScrollbar)和垂直滚动条(VscrollBar)二种,通常附在窗体上协助观察数据或确定位置,也可用作数据输入工具,用来提供某一范围内的数值供用户选择。

slide151

1. 属性

(1) Value

滑块所处位置所代表的值。

(2) Max:最大值

-32,768~32,767

(3) Min:最小值

-32,768~32,767

(4) SmallChange

最小变动值,

单击箭头时移动的增量值。

(5) LargeChange

最大变动值,单击空白处时移动的增量值。

slide152

2 事件

(1)Change事件

滚动条的Change事件在移动滚动框或通过代码改变其Value属性值时发生。单击滚动条两端的箭头或空白处将引发Change事件。

(2)Scroll事件

当滚动框被重新定位,或按水平方向或垂直方向滚动时,Scroll事件发生。拖动滑块时会触发Scroll事件。

Scroll事件与Change事件的区别在于:当滚动条控件滚动时Scroll事件一直发生,而Change事件只是在滚动结束之后才发生一次。

例:设计一个调色板应用程序。

slide154

上机作业:

1、窗体界面如图所示,程序执行时,用户在文本框输入考试分数,如果是在0 ~ 100 之间,则在窗体上显示所输入的分数,否则弹出警告信息,并清除文本框中的内容,使光标重新返回文本框,以便重新输入数据。当单击“清除”按钮时,将窗体和文本框清空。

slide155
活动二 列表项目的移动

2.10 列表框

2.11 组合框

slide156
2.8 列表框

列表框(ListBox) 控件显示项目列表,用户从其中可以选择一项或多项。列表框的默认名为List1、List2、List3等

  • 一、常用属性
  • (1)List 属性
        • 该属性是一个字符数组,存放列表框的项。List数组的下标是从0开始的,也就是说,第一个元素的下标是0。
        • 例如。在图中,各列表的内容如下:
          • List1.List(0)=“苹果"
          • List1.List(1)=“香蕉"
          • List1.List(2)=“雪梨"
          • List1.List(3)=“芒果"
          • List1.List(4)=“西瓜"
slide157

(2)ListIndex属性(在设计时不可用)

    • ListIndex的值表示执行时选中的列表项序号。如果未选中任何项,则ListIndex的值为-1。
  • (3)ListCount属性(在设计时不可用)
    • ListCount的值表示列表框中项目的数量。ListCount-1表示列表中最后一项的序号。
      • 使用0~ListCount-1之间的一个索引号与List属性可以获得任何一个列表项的内容。
  • (4)Sorted属性
    • Sorted属性决定列表框中项目在程序运行期间是否按字母排列显示。
      • True:按字母顺序排列显示。
      • False:按加入先后顺序排列显示。
    • 该属性只在设计状态设置。
slide158

(5)Text属性

    • Text属性值是被选中列表项的文本内容。
      • 该属性只在程序运行时设置或引用。
    • 说明:List1.Text表示被选中列表项的文本内容,即List1.ListIndex项的值。
  • (6)MultiSelect属性
  • 用于指示是否能够在列表框控件中进行复选以及如何进行复选,在运行时是只读的。

表 MultiSelect 属性设置值及含义

slide159

(7)Selected属性

该属性返回或设置列表框控件中的一个项目的选择状态。该属性是一个逻辑类型的数组,数组元素个数与列表框中的项目数相同,其下标的变化范围与List属性相同。

例如:List1.Selected(0)=True表示列表框List1的第一个项目被选中,此时ListIndex的值设置为0。

List1.selected(0)=true

List1.selected(1)=false

List1.selected(2)=true

List1.selected(3)=false

List1.SelCount=2

(8)SelCount 属性

在允许多选情况下,SelCount 属性返回在列表框控件中被选中表项的数量。如果没有表项被选中,那么 SelCount 属性将返回 0 值。

slide160

(9)Style属性

    • 该属性用于确定控件的外观,只能在设计时确定。其值可以设置为:
      • 0—标准形式。
      • 1—复选框形式。

列表框各主要属性的值:

List1.List(0)=“苹果”

List1.List(1)=“香蕉” List1.ListIndex = 3 (下标从0开始的)List1. ListCount = 5List1. Selected(3) = True,其余为False。List1. Sorted = False,没有排序。List1. Text 为 “芒果” ,与List1. List(List1. ListIndex)相等

slide161
二、常用事件

列表框接收Click和DblClick事件。

三、常用方法

列表框中的列表项,可以在设计状态通过List属性设置,

也可以在程序中用AddItem方法来添加,用RemoveItem方法

或Clear方法删除列表项。

(1)AddItem方法

  • 格式: 列表框.AddItem 项目字符串 [,索引值]
  • 功能:AddItem方法把“项目字符串”的文本放到列表框中。
  • 说明:如果省略了“索引值”,则文本被放在列表框的尾部。可以用“索引值”指定插入在列表框中的位置,表中的项目是从0开始的计数,“索引值”不能大于表中项数ListCount-1。该方法只能单个地向表中添加项目。
slide162

(2)RemoveItem方法

    • 格式:列表框.RemoveItem 索引值
    • 功能:该方法用来删除列表框中指定的项目。
    • 例如:在窗体上建立一个列表框:List1,两个命令按钮:Command1、Command2,则用下面的过程可以向列表框添加和删除项目。
      • Private Sub Command1_Click
      • List1.AddItem "One",0
      • End Sub
      • Private Sub Command2_Click
      • List1.RemoveItem 0
      • End Sub
  • (3)Clear方法
      • 格式: 列表框.Clear
      • 功能:该方法用来删除列表框中的全部内容。
      • 说明:执行了Clear方法后,ListCount重新被设置为0。
ad