《vb第5章数组、列表框和组合框ppt课件.ppt》由会员分享,可在线阅读,更多相关《vb第5章数组、列表框和组合框ppt课件.ppt(98页珍藏版)》请在三一办公上搜索。
1、5.1 数组的使用 5.2 控件数组 5.3 列表框与组合框5.4 小结,实例,本章实例,实例5.1,实例5.2,实例5.3,实例5.4,实例5.5,实例5.6,实例5.7,实例5.8,实例5.9,实例5.10,实例5.11,【引例】 计算20个数据的平均值。程序运行时随机产生20个两位整数显示在上面标签中;单击 “平均值”按钮时,计算20个数据的平均值显示在下面的标签中。,5.1 数组的使用,操作步骤,1、界面设计,2、编写窗体的Load事件,Private Sub Form_Load() End Sub,生成20个1099间的随机数,累加20个随机数,连接20个随机数,显示在标签中,2、编
2、写窗体的Load事件,Private Sub Form_Load() End Sub,生成20个1099间的随机数,累加20个随机数,连接20个随机数,显示在标签中,For i = 1 To 20 Next i,1,1,1,For i = 1 To 20 Next i,2、编写窗体的Load事件,Private Sub Form_Load() End Sub,生成20个1099间的随机数,累加20个随机数,连接20个随机数,显示在标签中,1,1,1,a = Int(Rnd * 90) + 10,s = s + a,L1.Caption = L1.Caption & str(a),Randomi
3、ze,Private Sub cmdAve_Click() End Sub,L2.Caption = “平均值:” & s/20,3、编写“平均值”按钮的单击事件,两个过程中都要用到,应定义成窗体级变量,【修改引例】 添加“大于平均值”按钮。单击 “大于平均值”按钮时,将20个数据中大于平均值的数据显示在下面标签中。,分析,单击“平均值”按钮后才能使用“大于平均值”按钮,为了找到大于平均分的各个数据,必须保存20个随机数据,定义20个整型变量,定义窗体级变量,Dim s As Integer Dim a1 As IntegerDim a2 As Integer Dim a20 As Integ
4、er,编写窗体的Load事件,Private Sub Form_Load() End Sub,a1 = Int(Rnd * 90) + 10a2 = Int(Rnd * 90) + 10 a20 = Int(Rnd * 90) + 10,cmdLarge.Enabled = False,Randomize,s = a1 + a2 + + a20,L1.Caption = a1 & a2 & & a20,编写“平均值”按钮的单击事件,Private Sub cmdAve_Click() End Sub,cmdLarge.Enabled = True,L2.Caption = “平均值:” & s
5、/20,编写“大于平均值”按钮的单击事件,Private Sub cmdLarge_Click() End Sub,ave = s / 20,L2.Caption = ,If a1 ave Then L2.Caption = L2.Caption & Str(a1)End If If a20 ave Then L2.Caption = L2.Caption & Str(a20)End If,烦!烦!烦!,思考:改进,20个变量的名字为a(1)、a(2)、a(20),对于第i个变量,可表示为a(i),随机生成20个数据,For i = 1 To 20 a(i) = Int(Rnd * 90) +
6、 10Next i,For i = 1 To 20 s = s + a(i) Next i,累加20个数据,连接20个数据,显示在标签中,For i = 1 To 20 L1.Caption = L1.Caption & a(i) Next i,查找大于平均值的数据,显示在标签中,For i = 1 To 20 If a(i) ave Then L2.Caption = L2.Caption & a(i) End IfNext i,改写窗体的Load事件,Private Sub Form_Load() cmdLarge.Enabled = False Randomize For i = 1 T
7、o 20 a(i) = Int(Rnd * 90) + 10 s = s + a(i) L1.Caption = L1.Caption & Str(a(i) Next iEnd Sub,改写“大于平均值”按钮的单击事件,Private Sub cmdLarge_Click() End Sub,L2.Caption = ave = s / 20For i = 1 To 20 If a(i) ave Then L2.Caption = L2.Caption & Str(a(i) End IfNext i,Dim a(1 To 20) As Integer,包括20个变量:,a(1)、a(2)、a(
8、3)、a(20),均是整型,若有Dim a(-1 To 10) As Single,包括12个变量:a(-1)、a(0)、a(1)、a(2)、 a(3)、a(10)各变量的数据类型均是单精度型,定义20个变量的方法,【实例5.1】 计算20个数据的总和与平均值。程序运行时随机产生20个两位整数显示在上面标签中;单击“求和”或“平均值”按钮时,计算20个数据的总和或平均值,显示在下面的标签中。,操作步骤,(1)设计用户界面,(2)定义窗体级变量,Dim a(1 To 20) As Integer,(3)编写窗体的装载事件过程代码,Private Sub Form_Load() Randomize
9、 For i = 1 To 20 a(i) = Int(Rnd * 90) + 10 lblData.Caption = lblData.Caption & Str(a(i) Next iEnd Sub,(4)编写“求和”命令按钮的单击事件代码,Private Sub cmdSum_Click() Dim sum As Integer For i = 1 To 20 sum = sum + a(i) Next i lblResult.Caption = 总和是: & sumEnd Sub,sum = sum + a(1)sum = sum + a(2)sum = sum + a(3)sum =
10、 sum + a(20),要处理1000个数据时,怎么办?,(5)编写“平均值”命令按钮的单击事件代码,Private Sub cmdAve_Click() Dim sum As Integer Dim ave As Single For i = 1 To 20 sum = sum + a(i) Next i lblResult.Caption=平均值是: & sum/20End Sub,技能要点,数组的概念数据类型相同的多个变量所构成的集合所有的变量都使用相同的名字 数组名不同的变量通过下标来区别,数组的定义,Dim 数组名(下界 To 上界) As 类型 Dim a( 3 To 25 )
11、As String 包含元素个数:上界 下界 + 1 a(3)、a(4)a(25)共23个元素,缺省时默认为0,a(0)、a(1)a(25)共26个元素,【实例5.2】数据的逆置。程序运行时随机产生10个两位整数显示在上面标签中;单击“逆置”按钮,将各数据按逆序重新放入原数组中并显示在下面标签中;单击“重置”按钮则重新产生10个两位整数显示在上面标签中,同时将下面标签清空。,操作步骤,(1)设计用户界面,(2)定义窗体级数组,Dim a(9) As Integer,a(0)、a(2)、a(3)、a(9),省略数组下标下界,(3)编写窗体的装载事件过程代码,Private Sub Form_Lo
12、ad() For i = 0 To 9 a(i) = Int(Rnd * 90) + 10 lblData.Caption = lblData.Caption & Str(a(i) Next iEnd Sub,(4)编写“逆置”命令按钮的单击事件代码,Private Sub cmdBack_Click() Dim t As Integer 实现数组元素的逆置功能 For i = 0 To 9 lblResult.Caption=lblResult.Caption & Str(a(i) Next iEnd Sub,(4)编写“逆置”命令按钮的单击事件代码,Private Sub cmdBack_
13、Click() Dim t As Integer 实现数组元素的逆置功能 For i = 0 To 9 lblResult.Caption=lblResult.Caption & Str(a(i) Next iEnd Sub,(4)编写“逆置”命令按钮的单击事件代码,t = a(0) : a(0) = a(9) : a(9) = tt = a(1) : a(1) = a(8) : a(8) = tt = a(2) : a(2) = a(7) : a(7) = tt = a(3) : a(3) = a(6) : a(6) = tt = a(4) : a(4) = a(5) : a(5) = t,
14、Private Sub cmdBack_Click() Dim t As Integer For i = 0 To 9 lblResult.Caption=lblResult.Caption & Str(a(i) Next iEnd Sub,For i = 0 To 4 t = a(i) a(i) = a(9 - i) a(9 - i) = tNext i,(4)编写“逆置”命令按钮的单击事件代码,Private Sub cmdBack_Click() Dim t As Integer For i = 0 To 9 lblResult.Caption=lblResult.Caption & S
15、tr(a(i) Next iEnd Sub,For i = 0 To 4 t = a(i) a(i) = a(9 - i) a(9 - i) = tNext i,(5)编写“重置”命令按钮的单击事件代码,Private Sub cmdReset_Click() lblData.Caption = lblResult.Caption = Form_LoadEnd Sub,相当于复制Form_Load中的所有代码,Private Sub Form_Load() For i = 0 To 9 a(i) = Int(Rnd * 90) + 10 lblData.Caption = lblData.Ca
16、ption & Str(a(i) Next iEnd Sub,【实例5.3】找数据中的最大、最小值。程序运行时随机产生10个两位整数显示在上面标签中;单击“最大”或“最小”按钮时,找出10个数据中的最大或最小值显示在下面标签中。,操作步骤,(1)设计用户界面,(2)定义窗体级数组,Dim a(9) As Integer,(3)编写窗体的装载事件过程代码,Private Sub Form_Load() For i = 0 To 9 a(i) = Int(Rnd * 90) + 10 lblData.Caption = lblData.Caption & Str(a(i) Next iEnd Su
17、b,(4)编写“最大”命令按钮的单击事件代码 Private Sub cmdMax_Click() Dim k As Integer 求最大元素下标值 lblResult.Caption = 最大元素是: & a(k) End Sub,记住最大值元素的下标值,假设第0个元素值最大 k=0,a(k)a(1)?,k=0,a,a(k)a(2)?,假,K不变,k=0,0,1,2,3,4,5,6,7,8,9,下标,找最大值的算法,假,K不变,a(k)a(3)?,k=0,a(k)a(4)?,k=0,a(k)a(5)?,真,k=5,K变化,a(k)a(6)?,a(k)a(7)?,a(k)a(8)?,a(k)
18、a(9)?,k=5,k=5,k=8,k=8,a(k)a(1)?,k=0,a,a(k)a(2)?,k=0,0,1,2,3,4,5,6,7,8,9,下标,找最大值的算法,a(k)a(3)?,k=0,a(k)a(4)?,k=0,a(k)a(5)?,k=5,a(k)a(6)?,a(k)a(7)?,a(k)a(8)?,a(k)a(9)?,k=5,k=5,k=8,k=8,If a(k)a(1) Then k=1,If a(k)a(2) Then k=2,If a(k)a(9) Then k=9,a(k)a(1)?,k=0,a,a(k)a(2)?,k=0,0,1,2,3,4,5,6,7,8,9,下标,找最大
19、值的算法,a(k)a(3)?,k=0,a(k)a(4)?,k=0,a(k)a(5)?,k=5,a(k)a(6)?,a(k)a(7)?,a(k)a(8)?,a(k)a(9)?,k=5,k=5,k=8,k=8,概括:If a(k) a(i) Then k=i,i = 19,a(k)a1?,k=0,a,a(k)a(2)?,k=0,0,1,2,3,4,5,6,7,8,9,下标,找最大值的算法,a(k)a(3)?,k=0,a(k)a(4)?,k=0,a(k)a(5)?,k=5,a(k)a(6)?,a(k)a(7)?,a(k)a(8)?,a(k)a(9)?,k=5,k=5,k=8,k=8,概括:If a(
20、k) a(i) Then k=i,k = 0For i = 1 To 9 If a(k) a(i) Then k = iNext i,(4)编写“最大”命令按钮的单击事件代码 Private Sub cmdMax_Click() Dim k As Integer k = 0 For i = 1 To 9 If a(k) a(i) Then k = i End If Next i lblResult.Caption = 最大元素是: & a(k)End Sub,(5)编写“最小”命令按钮的单击事件代码 Private Sub cmdMin_Click() Dim k As Integer k =
21、 0 For i = 1 To 9 If a(k) a(i) Then k = i End If Next i lblResult.Caption = 最小元素是: & a(k)End Sub,【实例5.4】数据排序。程序运行时,单击“产生数据” 按钮,随机产生20个0100之间的整数显示在窗体上部;单击“排序” 按钮,将排序后的数据显示在窗体下部。,操作步骤,(1)设计用户界面,(2)定义窗体级数组,Dim a(1 To 20) As Integer,(3)编写“产生数据”命令按钮的单击事件代码,Private Sub cmdData_Click() Dim i As Integer Cls
22、 Print Print “显示排序前的数据顺序” Randomize For i = 1 To 20 a(i) = Int(Rnd * 101) Print a(i); Tab(i Mod 10) * 6); Next i cmdSort.SetFocus End Sub,输出一个空行,每输出10个数据后换行,(4)编写“排序”命令按钮的单击事件代码,【实例5.5】在窗体上装载一幅图片,再加1个计时器控件。当程序运行时,计时器控件工作,窗体上不断飘落直径不等的白色圆,酷似下雪。,操作步骤,(1)设计用户界面,(2)定义窗体级数组 Dim Snow(1 To 500, 2) As Intege
23、r,含有500行、3列元素,Snow(1, 0)Snow(1, 1)Snow(1, 2)Snow(2, 0)Snow(2, 1)Snow(2, 2) Snow(500, 0)Snow(500, 1)Snow(500, 2),等价于0 To 2,雪花在窗体上的x坐标,雪花在窗体上的y坐标,y值增量,一个雪花的信息,Private Sub Form_Load() FillColor = vbWhite FillStyle = 0 Randomize For i = 1 To 500 Snow(i, 0) = Int(Rnd * frmEx5_5.Width) Snow(i, 1) = Int(Rn
24、d * frmEx5_5.Height) Snow(i, 2) = 20 + Rnd * 50 Next iEnd Sub,(3)编写窗体的装载事件过程代码,第i个雪花,(4)编写计时器的Timer事件代码,Private Sub tmrSnow_Timer() For i = 1 To 500 Snow(i, 1) = Snow(i, 1) + Snow(i, 2) If Snow(i, 1) frmEx5_5.Height Then Snow(i, 1) = 0 Snow(i, 0) = Int(Rnd * frmEx5_5.Width) End If Circle (Snow(i, 0)
25、, Snow(i, 1), 20 * Rnd, vbWhite Next i frmEx5_5.ClsEnd Sub,改变i雪花的y坐标,Y坐标越界时,5.2 控件数组,【实例5.6】窗体中有1个按钮、5个标签、1个包含10个单选按钮的控件数组。程序运行时,单击“测试” 按钮,在标签中随机显示一个交通标识名,用户单击相应单选按钮后,程序提示结果。,操作步骤,(1)设计用户界面,添加控件数组的方法,先画出第1个控件,设置其属性,通过复制的方法画第2控件,并设置相同的名称属性,(2)定义窗体级字符型数组,Dim tname(9) As String,根据交通标识图的个数定义数组的大小,控件数组的概
26、念,类型相同且名称属性相同的一组控件,通过Index属性区分各控件,optPicture(0)、optPicture(1) optPicture(9),(3)编写窗体的装载事件过程代码,Private Sub Form_Load() Dim i As Integer For i = 0 To 9 optPicture(i).Value = False Next i lblPrompt2.Visible = False lblAnswer.Visible = False lblEvaluate.Visible = False,控件数组元素,tname(0) = 步行街 tname(1) = 机动
27、车道 tname(2) = 交叉路口 tname(3) = 注意危险 tname(4) = 注意信号灯 tname(5) = 限高3.5米 tname(6) = 限重10吨 tname(7) = 禁止掉头 tname(8) = 禁止停留 tname(9) = 禁止非机动车左转End Sub,(4)编写“测试”按钮的单击事件过程代码,Private Sub cmdTest_Click() Dim i As Integer For i = 0 To 9 optPicture(i).Value = False Next i lblPrompt2.Visible = False lblAnswer.V
28、isible = False lblEvaluate.Visible = False i = Int(Rnd * 10) lblTest.Caption = tname(i) End Sub,(5)编写单击单选按钮控件数组元素的代码,Private Sub optPicture_Click(Index As Integer) lblPrompt2.Visible = True lblAnswer.Visible = True lblEvaluate.Visible = True lblAnswer.Caption = tname(Index) If lblAnswer.Caption = lb
29、lTest.Caption Then lblEvaluate.ForeColor = vbRed lblEvaluate.Caption = 恭喜你!回答正确! Else lblEvaluate.ForeColor = vbBlue lblEvaluate.Caption = 很遗憾,回答错误。 End IfEnd Sub,单击任意一个单选按钮时触发,根据其值判断所击的是哪一个,【实例5.7】窗体中有1个标签、1个包含10个单选按钮的控件数组。程序运行时,单击某一单选按钮,在标签中显示相应交通标识的名称。,操作步骤,(1)设计用户界面,(2)编写单击控件数组元素的代码,Private Sub
30、optPicture_Click(Index As Integer) Select Case Index Case 0 lblShow.Caption = 步行街 Case 1 lblShow.Caption = 机动车道 Case 2 lblShow.Caption = 交叉路口 Case 3 lblShow.Caption = 注意危险,常用Select-Case语句,Case 4 lblShow.Caption = 注意信号灯 Case 5 lblShow.Caption = 限高3.5米 Case 6 lblShow.Caption = 限重10吨 Case 7 lblShow.Cap
31、tion = 禁止掉头 Case 8 lblShow.Caption = 禁止停留 Case 9 lblShow.Caption = 禁止非机动车左转 End SelectEnd Sub,5.3.1 列表框5.3.2 组合框,5.3列表框与组合框,【实例5.8】窗体中有1个标签,1个列表框和2个按钮。程序运行时列表框中显示“北京”、“上海”、“天津”和“重庆”;单击“添加”按钮,出现输入框,用户输入新城市名后随即将该城市名添加到列表框中;选中列表框中某项并单击“删除”按钮,从列表框中删除该城市名。,5.3.1 列表框,操作步骤,(1)在窗体中添加所需控件,列表框控件在工具箱中的图标是 。,(2
32、)编写窗体的装载事件过程代码,Private Sub Form_Load() lstCity.AddItem 北京 lstCity.AddItem 上海 lstCity.AddItem 天津 lstCity.AddItem 重庆End Sub,向列表框中添加项目,列表框的AddItem方法调用格式,列表框名.AddItem 字符串 ,索引号,列表框中项的索引号从0开始出现在第n个位置上的项索引号为n-1省略索引号时新项被添加到列表框的尾部,(3)编写“添加”命令按钮的单击事件过程代码,Private Sub cmdAdd_Click() Dim city As String city = In
33、putBox(请输入城市名, 输入框) lstCity.AddItem cityEnd Sub,(4)编写“删除”命令按钮的单击事件过程代码,Private Sub cmdDelede_Click() lstCity.RemoveItem lstCity.ListIndexEnd Sub,删除指定的项目,所选项的索引号,当没选中任何项时,ListIndex属性值为-1,RemoveItem方法调用格式,列表框名.RemoveItem 索引号,删除第1项:,lstCity.RemoveItem 0,删除用户所选项:,lstCity.RemoveItem lstCity.ListIndex,If
34、lstCity.ListIndex -1 Then lstCity.RemoveItem lstCity.ListIndexElse MsgBox 请先选择!End If,【实例5.9】程序运行时随机产生100个两位整数添加在左列表框中;单击左列表框中某项,该列表项移到右列表框中;单击“”按钮则将左列表框中所有项移到右列表框中;单击“还原”按钮,左列表框中显示原有100个整数,右列表框清空。,操作步骤,(1)设计用户界面,(2)定义窗体级变量,Dim a(99) As Integer,(3)编写窗体装载事件过程代码,Private Sub Form_Load() For i = 0 To 99
35、 a(i) = Int(Rnd * 90) + 10 Next i addEnd SubPrivate Sub add() For i = 0 To 99 lstLeft.AddItem a(i) Next iEnd Sub,同一个数组,(4)编写左边列表框的单击事件过程代码,Private Sub lstLeft_Click() 在左边列表框所选项添加到右边列表框 删除左边列表框中所选项End Sub,lstRight.AddItem lstLeft.Text,lstLeft.RemoveItem lstLeft.ListIndex,(5)编写“”按钮的单击事件过程代码,Private Su
36、b cmdMove_Click() 左边所有项添加到右边列表框 删除左边所有项End Sub,(5)编写“”按钮的单击事件过程代码,Private Sub cmdMove_Click() 左边所有项添加到右边列表框 删除左边所有项End Sub,lstRight.AddItem lstLeft.List(0) lstRight.AddItem lstLeft.List(1) lstRight.AddItem lstLeft.List(k),最后一项索引号,(5)编写“”按钮的单击事件过程代码,Private Sub cmdMove_Click() 左边所有项添加到右边列表框 删除左边所有项En
37、d Sub,lstRight.AddItem lstLeft.List(0) lstRight.AddItem lstLeft.List(1) lstRight.AddItem lstLeft.List(k),For i = 0 To lstLeft.ListCount - 1 lstRight.AddItem lstLeft.List(i)Next i,列表项的总数目,lstLeft.Clear,(6)编写“还原”按钮的单击事件过程代码,Private Sub cmdReturn_Click() lstLeft.Clear lstRight.Clear addEnd Sub,不必重复写,【实
38、例5.10】程序运行时随机产生100个两位整数添加在左列表框中;选中左列表框中若干项后,单击“复制”按钮,将选中的项复制到右列表框中;单击“移动”按钮,将所选项目移动到右列表框中。,操作步骤,(1)设计用户界面,(2)编写窗体装载事件过程代码,Private Sub Form_Load() For i = 1 To 100 lstLeft.AddItem Int(Rnd * 90) + 10 Next iEnd Sub,(3)编写“复制”按钮的单击事件过程代码,Private Sub cmdCopy_Click() For i = 0 To lstLeft.ListCount - 1 If l
39、stLeft.Selected(i) = True Then lstRight.AddItem lstLeft.List(i) End If Next iEnd Sub,第i个列表项被选中,(4)编写“移动”按钮的单击事件过程代码,Private Sub cmdMove_Click() Do While i = lstLeft.ListCount - 1 If lstLeft.Selected(i) = True Then lstRight.AddItem lstLeft.List(i) lstLeft.RemoveItem i Else i = i + 1 End If LoopEnd Su
40、b,将While语句改为For语句?,【实例5.11】窗体中有5个标签和1个组合框。程序运行时在组合框中显示5个学生的姓名,组合框的文本框中显示第1个学生的姓名,2个标签中分别显示该学生的学号和成绩;单击组合框中某一姓名或在组合框中输入已有学生姓名,在2个标签中分别显示该学生的学号和成绩;若输入的学生不存在,在消息框中显示“无此人!”。,5.3.2 组合框,操作步骤,(1)在窗体中添加所需控件。组合框控件在工具箱中的图标是 。,(2)编写窗体装载事件过程代码,Private Sub Form_Load() cboName.AddItem 孙丹丹 cboName.AddItem 赵颖 cboNa
41、me.AddItem 刘晓磊 cboName.AddItem 张鹏 cboName.AddItem 李立新 cboName.Text = cboName.List(0) lblNum.Caption = 053301 lblScore.Caption = 90End Sub,将列表框中的第1项显示在组合框的文本框中,(3)编写单击组合框的事件过程代码,Private Sub cboName_Click() Select Case cboName.Text Case 孙丹丹 lblNum.Caption = 053301 lblScore.Caption = 90 Case 赵颖 lblNum.
42、Caption = 053516 lblScore.Caption = 85 Case 刘晓磊 lblNum.Caption = 053531,lblScore.Caption = 50 Case 张鹏 lblNum.Caption = 053310 lblScore.Caption = 75 Case 李立新 lblNum.Caption = 053225 lblScore.Caption = 62 Case Else MsgBox 无此人! End SelectEnd Sub,(4)编写组合框的文本框中输入数据时的代码,Private Sub cboName_KeyPress( KeyAscii As Integer) If KeyAscii = 13 Then cboName_Click End IfEnd Sub,数组 必须先定义后使用 定义格式: Dim 数组名(上限 To 下限) As 数据类型 控件数组 引用方法:控件名(控件的Index值),5.4 小结,列表框控件 lst,常用属性:List、ListCount、ListIndex Text常用方法:AddItem、RemoveItem、Clear常用事件:Click,组合框控件 cbo,与列表框类似,