




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目六数组任务6.1数组和数组元素任务6.2静态数组任务6.3动态数组任务6.4控件数组
任务6.1数组和数组元素
任务导入
计算机处理的数据各种各样,这些数据根据有序与否可分为两类:
(1)无序性数据,仅与其取值有关,而与其所在的位置无关。前面介绍的变量都是简单变量,如a、i、x等,并可以给简单变量赋予一个某种数据类型的数值,各个简单变量是各自独立的,与其所在的位置无关。
(2)有序性数据,不仅与其取值有关,而且与其所在的位置也密切相关,如体育比赛的成绩,就隐含着名次。
在程序设计中,利用简单变量可以解决不少问题。但是仅使用简单变量,势必受到简单变量单独性和无序性的限制,而难以或无力解决那些不仅与取值有关,而且与其所在位置也有关的较复杂的问题。学习目标
(1)理解数组、数组维数、数组元素等概念。
(2)了解数组的类型和形式。
1.理解数组的概念
在程序设计中,将一组排列有序、个数有限的数据作为一个整体,用一个统一的名字来表示,即数组。
假如有5个学生的成绩,这一组成绩可以用一个名字cj来表示,其中第一个学生的成绩为80,第二个学生的成绩为68,第三个学生的成绩为90,第四个学生的成绩为85,第五个学生的成绩为95,则这一组有排列顺序的数80,68,90,85,95,就是一个数组。在VB中,为了确定各数据与数组中每个元素的一一对应关系,必须给数组中的这些数据编号,即顺序号(用下标来指出顺序号,数组中也称为下标变量)。
因此可以说,数组即用一个名字代表顺序排列的一组数,顺序号就是下标变量的值。简单变量是无序的,无所谓谁先谁后,数组中的各元素是有排列顺序的。例如,在成绩数组cj中:
第一个学生的成绩用cj(1)来表示,其值为80;
第二个学生的成绩用cj(2)来表示,其值为68;
第三个学生的成绩用cj(3)来表示,其值为90;
第四个学生的成绩用cj(4)来表示,其值为85;
第五个学生的成绩用cj(5)来表示,其值为95。
2.掌握数组的命名
数组的命名规则与简单变量的命名规则一样,即由1~40个字符组成,组成的字符可以是字母、数字和小数点,并且必须以字母开头,如a、x、xscj等。
3.理解数组的维数
数组中下标的个数称为数组的维数。
如果数组中的所有元素能按行(或列)顺序排成一行(或一列),也就是说,用一个下标便可以确定它们各自所处的位置,则这样的数组称为一维数组。
如果数组中的所有元素能按行、列顺序排成一个矩阵,换句话说,必须用两个下标才能确定它们各自所处的位置,则这样的数组称为二维数组。依此类推,三个下标的数组,就构成三维数组,有多少个下标的数组,就构成多少维的数组,如四维数组、五维数组等。通常又把二维以上的数组称为多维数组。
例如:
a(10) 为一维数组
x(2,3) 为二维数组
b(4,5,6) 为三维数组
4.理解数组元素
1)数组中的元素
组成数组的各个元素一般为变量,由于这些变量共用一个变量名,即所在的数组名,因此必须要通过下标才能相互区别,故数组元素也称为下标变量。
在VB中,引用数组中的某一元素时,要指出数组名和用括号括起来的数组元素在数组中的位置(顺序号)的下标,即下标变量的标识为
〈数组名〉(〈下标表〉)其中,〈下标表〉是指一个或者几个下标(代表一维或者几维),各下标之间应该用逗号分隔。例如:
a(5) 代表数组a中顺序号为5的那个元素
x(26) 代表数组x中顺序号为26的那个元素
c(2,3) 代表数组c中第2排第3列的那个元素
2)下标的使用说明
(1)下标放在数组名后的括号内,如x(10)、a(4,5)、
b(2,3,4)等。
(2)下标可以是常量、变量或表达式,如a(3)、x(i)、
a(10-n,n+2)等。
(3)下标反映的是在数组中的位置。下标值若为非整数,则系统将按四舍五入自动取整,其值的范围在–32768
~32767之间。例如,对于下标变量x(3.4),系统将下标按四舍五入自动取整后进行使用,即x(3)。
5.了解数组的类型
VB中,数据有多种数据类型,相应地,数组也有多种类型。可以声明任何基本数据类型的数组,包括用户自定义类型和对象变量,但是一个数组中的所有元素应该具有相同的数据类型。
当然,数据类型为Variant(变体)型时,各个元素能够包含不同类型的数据(对象、字符串、数值等)。
6.了解数组的形式
在VB中,根据数组元素的个数能否变化,数组分为静态数组和动态数组。
静态数组:数组元素的个数固定不变。
动态数组:数组元素的个数在运行时可以改变。任务6.2静态数组
任务导入
静态数组是在声明时就已经确定了数组元素个数的数组。静态数组是最常用的数组。学习目标
(1)会声明静态数组。
(2)会对数组元素进行输入、输出、复制、初始化等操作。
(3)会使用静态数组编写程序。任务实施
1.声明静态数组
声明静态数组的语法格式为
Dim〈数组名〉(〈维数定义〉)[As〈类型〉]
【说明】(1)<维数定义>指定数组的维数以及各维的范围:
[〈下标下界1〉To]〈下标上界1〉[,[〈下标下界2〉To]〈下标上界2〉]…
例如:
Dima(2To4)AsInteger ‘3个元素,下标范围为2到4
Dimb(5To12)AsString
'8个元素,下标范围为5到12
(2)下标的上、下界不得超过长整型数据类型的范围
(-2147483648~2147483647)。
(3)二维数组的各维之间用逗号分隔。例如:
Dima(1To3,1To4)AsDouble
(4)可以将所有这些推广到二维以上的数组。例如:
Dimb(2,1To3,1To4)
2.了解OptionBase语句
如果不指定〈下标下界〉,则数组的下界由OptionBase语句控制。语法格式为
OptionBase〈n〉
【说明】(1) n只能为0或1。
(2)如果没有使用OptionBase语句,则默认的下界为0。例如:
Dima(4)AsInteger‘5个元素,下标范围为0到4
Dimb(20)AsDouble '21个元素,下标范围为0到20
(3)如果使用OptionBase1语句,如:
OptionBase1 ‘默认下界为1
Dimb(2,1To3,1To4)
则建立了一个三维数组b,大小为3×3×4,元素总数为三个维数的乘积,即36。
3.了解引用数组元素时的注意事项
在建立(声明)一个数组之后,就可以使用数组了。使用数组就是对数组元素进行各种操作,如赋值、表达式运算、输入、输出等。
对数组元素的操作与对简单变量的操作类似,但在引用数组元素的时候要注意以下几点:
(1)数组声明语句不仅可以定义数组、为数组分配存储控件,而且还能对数组进行初始化,使得数值型数组的元素值初始化为0,字符型数组的元素值初始化为空等。
(2)引用数组元素的方法是在数组名后的括号中指定下标。例如:
t=A(5):s=B(3,4)
其中,A(5)表示数组A中索引值为5的元素,B(3,4)表示二维数组B中行下标为3、列下标为4的元素。注意与数组声明语句中下标的上界相区别。
(3)引用数组元素时,数组名、数组类型和维数必须与数组声明时一致。
(4)引用数组元素时,下标值应在数组声明时所指定的范围之内。
(5)在同一过程中,数组与简单变量不能同名。
4.应用静态数组
【课堂演练】
【实例6-1】计算某组10个同学的总分、平均分。
【实现步骤】
(1)首先从“文件”菜单中选择“新建工程”,在打开的“新建工程”对话框中双击“标准EXE”,新建一个标准工程。
(2)建立应用程序用户界面。在窗体设计器中加入两个标签Label1、Label2和一个Command1,调整它们的位置及大小,如图6.1所示。图6.1建立用户界面
(3)设置对象属性,参见图6.2。
(4)编写事件过程代码。考虑到要在不同的过程中使用数组,所以首先在模块的通用段声明数组。从“视图”菜单中选择“代码窗口”,在“代码窗口”中的对象下拉列表框中选“(通用)”,在事件程序下拉列表框中选“(声明)”,输入下面代码:
OptionBase1
Dima(1To10)AsSingle“统计”按钮Command1的单击Click事件代码为
PrivateSubCommand1_Click()
DimiAsInteger,totalAsSingle,averageAsSingle
Fori=1To10
a(i)=Val(InputBox(“请输入第”&Str(i)&“个学生的成绩”,“输入成绩”))
total=total+a(i)
Nexti
average=total/10
Label1.Caption=Label1.Caption+Format(total)
Label2.Caption=Label2.Caption+Format(average)
EndSub
(5)运行程序。单击“统计”按钮,依次输入10个学生的成绩,如图6.2(a)所示,计算结果如图6.2(b)所示。图6.2依次输入学生成绩和统计结果
【实例6-2】输入一串字符,统计各字母出现的次数,不区分大小写。
【实现步骤】
(1)问题分析。统计26个英文字母出现的个数,必须声明一个具有26个元素的数组,每个元素的下标与26个英文字母的次序对应。从输入的字符串中逐一取出字符,转换成大写字符(使得大小写不分),进行判断。
(2)建立用户界面,并设置对象属性,如图6.3所示。图6.3建立用户界面和程序运行结果
(3)编写事件代码。“统计字母”命令按钮Command1的Click事件代码为
PrivateSubCommand1_Click()
Dima(1To26)AsInteger
DimiAsInteger,jAsInteger,cAsString*1
tot=Len(Text1) '求字符串的长度Fori=1Totot
c=UCase(Mid(Text1,i,1))'取一个字符,将其转换成相应的大写字母
Ifc>="A"Andc<="Z"Then
j=Asc(c)–65+1'将大写字母A~Z转换成1~26的下标
a(j)=a(j)+1 '对应数组元素加1
EndIf
Nexti
Forj=1To26 ‘输出字母及其出现的次数
Ifa(j)>0Then
Label2.Caption=Label2.Caption&Chr$(j+64)&
“=”&a(j)&“”
EndIf
Nextj
EndSub
(4)运行程序,结果如图6.3所示。
【实例6-3】随机产生10个数,用“选择排序法”按递增顺序排序。
【实现步骤】
(1)问题分析。递增选择排序的思路是:
①对有n个数的序列,从中选出最小的数(递增),与第1个数交换位置;
②除第1个数外,其余n - 1个数再按步骤①的方法选出次小的数,与第2个数交换位置。
③重复步骤② n-1遍,最后构成递增序列。为了便于理解,我们假定a数组有5个元素,下标从1To5,且数组中已赋值,上述过程如图6.4所示。图6.4选择排序法示意图(2)建立用户界面,并设置对象属性,如图6.5所示。图6.5用户界面和排序结果
(3)编写事件代码。“排序”命令按钮Command1的Click事件代码为
PrivateSubCommand1_Click()
Dima(1To10)AsSingle
Randomize
Fori=1To10‘产生10个随机数
a(i)=Int(Rnd*90+10)
Label1.Caption=Label1.Caption&a(i)&""Nexti
Fori=1To9 '进行排序
Forj=i+1To10
Ifa(j)<a(i)Then
t=a(i) '交换数据
a(i)=a(j)
a(j)=t
EndIf
Nextj
Nexti
Fori=1To10 ‘输出排序后的结果
Label2.Caption=Label2.Caption&a(i)&“”
Nexti
Command1.Enabled=False
EndSub
(4)运行程序,结果如图6.5所示。
【实例6-4】将文本框的数据存入数组中,编写程序,要求能输入个人情况,并可根据姓名进行查询。
【实现步骤】
(1)建立应用程序用户界面,并设置对象属性,如图6.6
所示。图6.6建立用户界面并设置对象属性
(2)编写事件代码。在通用段声明数组:
Dima(10,6)AsVariant‘定义变体数组,其数组元素可以是Integer、Long等类型
DimnumAsInteger
“输入”命令按钮Command1的Click事件代码为
PrivateSubCommand1_Click()
StaticiAsInteger ’用Static声明,只重设0一次,其值可保留到下次过程调用
Text1.SetFocus‘使程序开始时,光标(焦点)位于输入框Text1中
i=i+1
Form1.Caption=“请输入第”&Str(i+1)&“位同志的情况”
a(i,1)=Text1.Text ‘数据输入
a(i,2)=Text2.Text
a(i,3)=Text3.Text
a(i,4)=Text4.Text
a(i,5)=Text5.Text
a(i,6)=Text6.Text
num=i
Text1.Text=“”‘清空各文本框内容,为下次输入或查询做准备
Text2.Text=“”
Text3.Text=“”
Text4.Text=“”
Text5.Text=“”
Text6.Text=“”
EndSub“查询”命令按钮Command2的Click事件代码为
PrivateSubCommand2_Click()
StaticiAsInteger
Fori=1Tonum
Ifa(i,1)=Text1.TextThen‘确定输入姓名存在
Text2.Text=a(i,2)’调出相应数据
Text3.Text=a(i,3)
Text4.Text=a(i,4)
Text5.Text=a(i,5)
Text6.Text=a(i,6)
ExitSub‘跳出本过程
EndIf
Nexti
MsgBox“查无此人!”,vbOKOnly,“抱歉”
’姓名不相符时,输出消息框
EndSub“结束”命令按钮Command3的Click事件代码为
PrivateSubCommand3_Click()
UnloadMe
EndSub
(3)运行程序,结果如图6.7所示。图6.7输入和查询个人情况
【实例6-5】矩阵的加法运算。两个相同阶数的矩阵A和
B相加,是将相应位置上的元素相加后放到同阶矩阵C的相应位置。
【实现步骤】
(1)问题分析。定义三个二维数组a(n,m)、b(n,m)和c(n,m),利用双重循环和随机函数产生a(n,m)和b(n,m)中各元素的值。然后通过双重循环得到c(n,m)。
(2)设计程序界面,并设置对象属性。选择“新建”工程,进入窗体设计器,在窗体中增加三个图片框Picture1~Picture3,两个标签Label1、Label2和两个命令按钮Command1、Command2。设置对象属性如图6.8所示。图6.8设计窗体界面与运行程序
(3)编写代码。在“通用”段声明数组:
Dima(5,3)AsInteger,b(5,3)AsInteger
“重置”按钮Command1的Click事件代码为
PrivateSubCommand1_Click()
Forn=1To5 ‘控制矩阵行数
Form=1To3
'控制矩阵列数
x=Int(Rnd*100):a(n,m)=Val(x)‘产生随机数
x=Int(Rnd*100):b(n,m)=Val(x)’产生随机数
Next
Next
Picture1.Cls:Picture2.Cls:Picture3.Cls
‘清空图片框
Picture1.CurrentY=80:Picture2.CurrentY=80
’控制输出位置
Forn=1To5
Form=1To3
Picture1.PrintFormat(a(n,m),“@@@@”); ‘输出产生的随机数
Picture2.PrintFormat(b(n,m),“@@@@”); ’输出产生的随机数
Next
Picture1.Print:Picture2.Print ‘换行
Next
EndSub“计算”按钮Command2的Click事件代码为
PrivateSubCommand2_Click()
Dimc(5,3)AsInteger
Fori=1To5
Forj=1To3
c(i,j)=a(i,j)+b(i,j)
‘求两矩阵相加的各项值
Next
Next
Picture3.Cls'清空
Picture3.CurrentY=80'确定输出位置
Forn=1To5
Form=1To3
Picture3.PrintFormat(c(n,m),"@@@@");'输出结果数据
Next
Picture3.Print‘换行
Next
EndSub
(4)运行程序。单击“重置”按钮产生原始数据,单击“计算”按钮得到相加结果。如果再次单击“重置”按钮,则重新产生数据,如图6.9所示。图6.9两矩阵相加运行结果任务6.3动态数组
任务导入
对于前一种情况,可以一面输入数据一面随着数据量的增加而重新声明数组的大小;而对于后一种情况,可在需要使用特别大数组的过程中重新声明数组大小,离开该过程前取消该数组。
本任务将学习动态数组的程序设计方法。学习目标
(1)会使用动态数组编写程序。
(2)会使用ForEach…Next语句对数组中的元素进行处理。任务实施
1.创建动态数组
创建动态数组的步骤如下:
(1)用Public语句(公用数组)、Dim语句(模块级数组)、Static语句或Private语句(局部数组)在过程中声明一个未指明大小及维数的空数组,这样就将数组声明为动态数组了。语法格式为
Public|Private|Dim|Static〈数组名〉()As〈类型〉
(2)用ReDim语句分配实际的元素个数。语法格式为
ReDim[Preserve]〈数组名〉(〈维数定义〉)[As〈类型〉]
例如,第一次声明在模块级所建立的动态数组a:
Dima()AsInteger
然后,在过程中给数组分配空间:
PrivateSubForm_Activate()
ReDima(9,19)
EndSub这里的ReDim语句给a分配一个10×20的整数矩阵(元素总数为200)空间。
【说明】
(1)ReDim语句只能出现在过程中。与Dim语句、Static语句不同,ReDim语句是一个可执行语句,由于这一语句的存在,应用程序在运行时将执行一个操作。
(2)每次运行程序时,ReDim语句都会清除数组内容,当前存储在数组中的值将全部丢失,VB重新将数组元素的值置为0(对Numeric数组)、置为零长度字符串(对String数组)或置为Empty(对Variant数组)。此时可以用Preserve关键字保留原先的数据。
(3)声明动态数组的时候并不指定数组的维数,数组的维数由第一次出现的ReDim语句指定。
(4)对于任一维数,ReDim语句都能改变元素的数目及其上下界,但是,数组的维数不能改变。
2.保留动态数组的原有数据
使用ReDim语句时,将清除数组中的原有数据。但是,有时需要改变数组大小而又不丢失数组中的数据,这时就可以使用具有Preserve关键字的ReDim语句了。
使用具有Preserve关键字的ReDim语句可增加数组大小,又不丢失原数据。例如:
ReDima(2,4)
ReDimPreservea(2,6)原数组中数据均可保留,且增加了a(1,5)、a(1,6)、a(2,5)、a(2,6)四个位置。
如果声明ReDima(3,4),将会清除原数组内容。
使用Preserve关键字,只能改变多维数组中最后一维的上界,而不能改变维数。如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。如果数组是二维或多维的,则只能改变其最末维才可同时保留数组中的内容,若改变了其他维或最后一维的下界,运行时就会出错。
【课堂演练】
【实例6-6】用动态数组修改【实例6-4】,输入个人情况并可根据姓名进行查询。
【实现步骤】
(1)问题分析。首先声明一个未指明维数及大小的数组。如果同【实例6-4】一样直接声明ReDima(1,7),则原先输入的数组内容完全清除,所以必须使用ReDimPreservea(i,7),但是VB规定的使用Preserve保留原数组内容只限于最后一个维数扩展长度,此法不能实现。
(2)建立应用程序用户界面,并设置对象属性,如【实例6-4】中一样,只需修改事件编码。
在通用段声明数组:
Dima()AsVariant‘声明一个未指定维数及大小的数组
DimnumAsInteger修改“输入”命令按钮Command1的Click事件代码如下:
PrivateSubCommand1_Click()
StaticiAsInteger
Text1.SetFocus ‘使程序开始时,光标(焦点)位于输入框Text1中
i=i+1
ReDimPreservea(7,i)'声明动态数组,保留原先数据Form1.Caption="请输入第"&Str(i+1)&"位同志的情况"
a(1,i)=Text1.Text
a(2,i)=Text2.Text
a(3,i)=Text3.Text
a(4,i)=Text4.Text
a(5,i)=Text5.Text
a(6,i)=Text6.Textnum=i
Text1.Text=""
Text2.Text=""
Text3.Text=""
Text4.Text=""
Text5.Text=""
Text6.Text=""
EndSub“查询”命令按钮Command2的Click事件代码如下:
PrivateSubCommand2_Click()
StaticiAsInteger
Fori=1Tonum
Ifa(1,i)=Text1.TextThen
Text2.Text=a(2,i)
Text3.Text=a(3,i)
Text4.Text=a(4,i)
Text5.Text=a(5,i)
Text6.Text=a(6,i)
ExitSub ‘跳出本过程
EndIf
Nexti
MsgBox“查无此人!”,vbOKOnly,“抱歉”
EndSub“结束”命令按钮Command3的Click事件代码如下:
PrivateSubCommand3_Click()
UnloadMe
EndSub
(3)运行程序,结果同【实例6-4】。
【实例6-7】编写程序,输出杨辉三角形,如图6.10所示。图6.10杨辉三角形
【实现步骤】
(1)问题分析。杨辉三角形中的各行是二项式(a+b)
n展开式中各项的系数。由图6.10的排列格式可以看出,杨辉三角形每行的第一列和最后一列均为1,其余各项的值都是其上一行中前一列元素与后一列元素之和。上一行同一列没有元素时认为是0。由此可得算法为
A(i,j)
=A(i-1,j-1)+A(i-1,j)
(2)建立应用程序用户界面并设置对象属性,参见图6.11所示。图6.11杨辉三角形
(3)编写代码。
在模块的通用段声明一个动态数组:
Dima()
为了能输入行数并按回车后可以得到各项,编写文本框Text1的按键(KeyPress)事件代码如下:
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
DimnAsInteger
IfKeyAscii=13Then‘按回车键时执行
n=Val(Text1.Text)’在文本框中输入的行数
Ifn>10Then‘设定不超过10行
MsgBox“请不要超过10”’消息框
ExitSub
'退出过程
EndIf
ReDima(n,n)‘分配动态数组实际的元素个数
Fori=1Ton
a(i,1)=1:a(i,i)=1’使得每行两边的元素值为1
Next
PrintTab(20);Format(1,"!@@@")&Chr(13)
PrintTab(18);Format(1,“!@@@”)&Space(2)&Format(1,“!@@@”)&Chr(13)
Fori=3Ton
PrintTab(20–i*2);Format(a(i,1),“!@@@@”)&Space(2);
Forj=2Toi–1
a(i,j)=a(i–1,j–1)+a(i–1,j)
PrintFormat(a(i,j),"!@@@@@");
Next
PrintSpace(2)&Format(a(i,i),“!@@@@”)&Chr(13)
Next
EndIf
EndSub
(4)运行程序,在文本框中输入行数,如8,回车后显示出杨辉三角形,如图6.11所示。
4.了解ForEach…Next语句
与For…Next循环语句类似,ForEach…Next循环语句也被用来执行指定重复次数的循环。但是,ForEach…Next语句专门用于数组或对象集合中的每个元素。
ForEach…Next语句的语法格式为
ForEach〈成员〉In〈数组〉
[〈语句组〉]
[ExitFor]
Next[〈成员〉]
【说明】
(1)〈成员〉是一个Variant(变体)型变量,代表数组中的每个元素。
(2)〈数组〉是一个数组名,没有括号和上下界。
5.理解ForEach…Next语句的执行过程
用ForEach…Next语句可以对数组中的元素进行处理,包括查询、显示或读取。它所重复执行的次数由数组中元素的个数确定,也就是说,数组中有多少个元素,就自动重复执行多少次。例如:
Dima(1To8)
ForEachxIna
Printx;
Nextx
以上程序中的Print语句重复八次(因为数组a中有八个元素),每次输出数组中一个元素的值。这里的x类似于For…Next循环中的循环控制变量,但不需要为其提供初值和终值,而是根据数组元素的个数确定执行循环体的次数。此外,x的值处于不断的变化之中:开始执行时,x是数组第一个元素的值;执行完一次循环体后,x变为数组第二个元素的值……当x为最后一个元素的值时,执行最后一次循环。
【课堂演练】
【实例6-8】用ForEach…Next语句求1+2+3+…+100的值。
【实现步骤】
(1)建立用户界面并设置对象属性,如图6.12所示。图6.12建立用户界面和设置对象属性
(2)编写事件代码。编写“计算”命令按钮Command1的Click事件代码:
PrivateSubCommand1_Click()
Dimx(100),a ‘声明数组和变量
Fori=1To100’为数组元素赋值
x(i)=i
Nexti
ForEachaInx() ‘求和
s=s+a
Next
Label1.Caption=s ’输出结果
EndSub
(3)运行程序,结果如图6.12所示。任务6.4控件数组
任务导入
许多同样的数据类型保存在一个变量中称为数组;同理,许多相同的控件集合在一起就是控件数组。使用控件数组可以方便地对界面上相同的控件进行统一编程,以简化代码。
本任务将学习控件数组的概念和使用方法。学习目标
(1)理解控件数组的概念。
(2)会建立控件数组。
(3)会使用控件数组编程。任务实施
1.理解控件数组的概念
控件数组是由一组相同类型的控件组成的,它们共用一个控件名,具有相同的属性。当建立控件数组时,系统给每个元素赋一个唯一的索引号(Index)。通过属性窗口的Index属性可以知道该控件的下标是多少,第一个控件的下标是0。例如,控件数组cmdName(5)表示控件数组名为cmdName的第六个
元素。控件数组可以在命令按钮组、单选钮组、复选框组、文本框组、标签组等控件中使用。
控件数组的特点为:
具有相同的名称(Name)。
用下标索引值(Index)来识别各个控件。
控件数组适用于若干个控件执行相似操作的场合,控件数组共享同样的事件过程。
2.建立控件数组
可以使用下述三种方法之一建立控件数组:
为控件起相同的名字。
复制现有控件。
设置控件的Index属性为非Null数值。
1)通过为控件起相同的名字建立控件数组
(1)画出控件数组中要添加的控件(必须为同一类型的控件),并且决定哪一个控件作为数组中的第一个元素。
(2)选定控件,将其Name属性设置成数组名称。
(3)在为数组中的其他控件输入相同名称时,VB将显示一个对话框,要求确认是否要创建控件数组。此时回答“是”,确认此操作。例如,若控件数组的第一个元素名为Command1,此时选择另一个命令按钮添加到数组中,并将其名称也设置为Command1,将显示这样一段信息:“已经有一个控件为'Command1'。创建一个控件数组吗?”。选择“是”按钮,确认操作,如图6.13所示。图6.13确认创建控件数组
2)通过复制现有控件建立控件数组
(1)画出控件数组中的第一个控件。
(2)当控件获得焦点时,单击“复制”按钮。
(3)单击“粘贴”按钮,VB将显示一个对话框询问是否确认创建控件数组。回答“是”,确认操作,得到控件数组中的第二个控件。
(4)继续单击“粘贴”按钮,可得到控件数组中的其他控件。每个新数组元素的索引值与其添加到控件数组中的次序相同,如图6.14中第二次粘贴的Option1控件,其Index的值为2。并且在添加控件时,大多数可视属性,如高度、宽度和颜色等,都将从数组中第一个控件复制到新控件中。图6.14新数组元素的索引值与其添加到控件数组中的次序一样
【实例6-9】设计一个窗体,输入两个数,根据不同运算符计算结果。
【实现步骤】
(1)问题分析。假设需要进行的有加、减、乘、除、整除、余数、指数和字符串连接8种运算。根据运算方式,显示计算结果。
(2)建立应用程序用户界面,并设置对象属性。利用Label控件,在窗体上拖曳出四个标签对象Label1~Label4;利用TextBox控件,拖曳出Text1和Text2两个文本框对象;利用Frame控件,拖曳出Frame1框对象。利用OptionButton控件,拖曳出置于Frame1中的Option1单选钮,单击“复制”按钮,将Option1单选钮的对象复制到剪贴板中,再选中Frame1对象,单击“粘贴”按钮,单击“是”,表示将产生一个属于单选钮类别的控件数组。将Frame1对象内左上角新产生的Option1对象拖曳到Frame1框内已有项目的下方,如此重复粘贴,直到产生8个Option1对象,如图6.15(a)所示,并依次改变标题名。图6.15用户界面与程序运行结果
(3)编写程序代码。单选钮Option1的Click事件代码:
PrivateSubOption1_Click(IndexAsInteger)
DimxAsSingle,yAsSingle
x=Val(Text1.Text)
y=Val(Text2.Text)
SelectCaseIndex‘Index值从0开始
Case0’加
Label4.Caption=x+y
Case1 '减
Label4.Caption=x–y
Case2 '乘
Label4.Caption=x*y
Case3 '除
Label
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论