




已阅读5页,还剩190页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Visual Basic 6.0程序设计案例教程(下),第5章 数组,本章内容,基本概念及操作 静态数组 动态数组 控件数组 控件 列表框(ListBox) 组合框(ComboBox),基本概念及操作,数组 一组具有相同名字不同下标的变量构成了数组 score(1),score(2),score(3)score(50) 例: 求50个学生的平均成绩,并统计高于平均成绩的人数。,数组元素,下标,基本概念及操作,For i = 1 To 50 score = val(InputBox(“请输入学生的成绩”) sum = sum + score Next i ave = sum / (i - 1) Print ave End Sub,基本概念及操作,For i = 1 To 50 score(i) = InputBox(“请输入学生的成绩“) sum = sum + score(i) Next i ave = sum / (i - 1) Print ave For i = 1 To 50 If score(i) ave Then n = n + 1 Next i Print n,基本概念及操作,数组 静态数组 一维数组 二维数组 动态数组,一维数组,声明 声明一维数组的形式如下: Dim 数组名(下界 To上界)As 类型 例:Dim score(50) As Single score(0),score(1),score(2)score(50) Dim a(-5 To 3) As Integer a(-5), a(-4), a(-3), a(-2), a(-1), a(0), a(1), a(2), a(3),数组的基本操作,数组的输入 数组的输出,数组的基本操作数组的输入,利用循环结构分别给数组元素赋值 在一维数组中利用Array函数为数组元素赋值 数组名到数组名的直接赋值。,数组的基本操作数组的输入,利用循环结构分别给数组元素赋值 For i = 1 To 50 score(i) = InputBox(“请输入学生的成绩“) Next i,数组的基本操作数组的输入,在一维数组中利用Array函数为数组元素赋值 其格式为 : 数组名=Array(数组元素值) 例:Dim s() s=Array(1,2,3,4,5) 将1,2,3,4,5这5个数赋值给数组s即s(0),s(1),s(2),s(3),s(4)的值分别为1,2,3,4,5。,数组的基本操作数组的输入,数组名到数组名的直接赋值 例如: Dim a(), b() a = Array(1, 2, 3, 4, 5) b = a 将数组a的值1,2,3,4,5赋值给数组b相应的元素。,数组的基本操作数组的输出,For EachNext语句 其一般格式为: For Each 成员 In 数组 循环体 Exit For Next 成员,例如: Dim s() S=array(1,2,3,4,5) For Each x in s print x; Next x,数组的基本操作数组的输出,用循环结构 例: Dim s() S=array(1,2,3,4,5) For i=0 to 4 print s(i); Next i,数组的使用,【实例5.1-2】输入大赛选手的姓名和成绩,输出成绩列表 。,编写代码数组赋值,数组赋值 Dim nam(9) As String, score(9) As Single, b As Boolean, i As Integer, j As Integer Const N = 9,编写代码数组赋值,Private Sub txtname_LostFocus() If txtname.Text “ Then nam(i) = txtname.Text Else nam(i) = “*“ End If i = i + 1 If i N Then txtname.Enabled = False End Sub,编写代码数组赋值,Private Sub txtscore_LostFocus() If txtscore.Text “ Then score(j) = Val(txtscore.Text) Else score(j) = 0 End If j = j + 1 txtname.Text = “ txtscore.Text = “ If j N Then txtscore.Enabled = False End Sub,编写代码显示选手的成绩,列表框lstscore中显示选手的成绩 Private Sub cmdshow_Click() Dim i As Integer If b = False Then For i = 0 To N Lstscore. AddItem Space$(3) + nam(i) + Space$(7) + Str$(score(i) Next i End If b = True End Sub,编写代码“排序”按钮代码,列表框中的数据赋值给数组 For i = 0 To N liststr = LTrim$(Lstscore. List(i) 去掉列表项Lstscore.List(i)中左边的空格 s = Split(liststr, “ “) 将列表项字符分割成字符数组。分割符是7个空格,由于列表项中姓名和成绩之间由7个空格分隔。 nam(i) = s(0) score(i) = Val(s(1) Next i,编写代码“排序”按钮代码,数组排序 For i = 0 To N - 1 max = i For j = i + 1 To N If score(j) score(max) Then max = j Next j t = score(i): score(i) = score(max): score(max) = t st = nam(i): nam(i) = nam(max): nam(max) = st Next i,编写代码“排序”按钮代码,排好序的数据输出到列表框 Lstscore.Clear For i = 0 To N Lstscore.List(i) = Space$(3) + nam(i) + Space$(7) + Str$(score(i) Next i End If,二维数组,二维数组的声明形式如下: Dim 数组名(下标1,下标2) As 类型 Dim a(2,3) As Integer 存储结构为 :,二维数组,Option Base n语句 其中n可以取1或0 。当n为1时,可以使所有定义时省略下界的数组的初始下标从1开始;为0下标从0开始。此语句必须出现在数组声明之前,且位于所有事件过程的前面。其作用范围仅限于出现在同一代码窗口的未声明下界的数组。一个代码窗口中Option Base n语句只能出现一次。,二维数组的应用,【实例5.3】输入10个学生某门课程的平时成绩,期中考试成绩以及期末考试成绩,按照平时成绩占15%,期中成绩占25%,期末成绩占60%的比例,计算出10个学生此门课程的最后成绩。,编写代码“录入”按钮代码,Option Base 1 Dim i As Integer Dim studentn(10, 2) As String, students(10, 4) As Single Const M = 10, N1 = 2, N2 = 4,Private Sub cmdin_Click() Dim s() As String i = i + 1 If i = M Then s = Split(txtin.Text, “,“) studentn(i, 1) = s(0) studentn(i, 2) = s(1) For j = 1 To N2 - 1 students(i, j) = s(j + 1) Next j Else txtin.Enabled = False End If End Sub,编写代码文本框代码,Private Sub txttable_Click() Dim i As Integer, j As Integer Dim tstr As String 计算“最后成绩” For i = 1 To M students(i, 4) = students(i, 1) * 0.15 + students(i, 2) * 0.25 + students(i, 3) * 0.6 Next i,编写代码文本框代码,输出数组到文本框 For i = 1 To M For j = 1 To N1 tstr = tstr + studentn(i, j) + Space$(10 - Len(studentn(i, j) Next j For j = 1 To N2 tstr = tstr + str$(students(i, j) + Space$(10 - Len(str$(students(i, j) Next j txttable.Text = tstr + Chr$(13)+chr$(10) Next i,编写代码其它代码,Private Sub txtin_GotFocus() txtin.SelStart = 0 选定的开始位置,第一个字符的位置是零 txtin.SelLength = Len(txtin.Text) 选定的长度 End Sub,动态数组,Option Base 1 Dim s() As String Private Sub Form_Click() Dim n As Integer 输入学生人数 n = InputBox(“请输入学生人数“) ReDim s(n) For i = 1 To n s(i) = InputBox(“输入学生姓名“) Print Spc(2); s(i); Spc(2); Next,动态数组,Print “改变数组的大小且保留数组中的值“ ReDim Preserve s(n + 1) Print For i = 1 To n + 1 Print Spc(2); s(i); Spc(2); Next i,动态数组,Print “改变数组的维数,原数组值丢失“ ReDim s(n, 3) For i = 1 To n Print Spc(2); s(i, 1); Spc(2); Next i,自定义数据类型,用户自定义类型通过Type语句实现,形式如下: Type 自定义类型名 元素1 As 类型 元素2 As 类型 End Type,自定义数据类型,说明: “元素”表示自定义类型中的一个成员。 “类型”为标准数据类型。若为字符串型,必须是定长字符串。 自定义类型必须在标准模块(.BAS)中定义,默认是Public。,自定义数据类型,例: 在模块中定义一个学生成绩处理的类型student 。 打开模块代码窗口。【工程】|【添加模块】,打开 “添加模块”对话框,单击【打开】按钮,打开模块Modulel代码窗口,自定义数据类型,在Modulel代码窗口输入自定义类型代码: Type student Name As string*10 姓名,字符串长度为10。 Number As string*7 学号,字符串长度为7。 Score(1 To 4) As single 4种成绩 End Type,自定义数据类型,录入数据代码 Option Base 1 Dim students(10) As student Dim i As Integer Const M = 10 Private Sub cmdin_Click() Dim s() As String Dim j As Integer Dim tstr As String,自定义数据类型,i = i + 1 If i = M Then s = Split(txtin.Text, “,“) students(i) .Name = s(0) students(i) .Number = s(1) For j = 1 To 3 students(i) .Score(j) = s(j + 1) Next j,控件数组,控件数组的概念 类型相同且名称属性相同的一组控件 通过Index属性区分各控件 optPicture(0)、optPicture(1) optPicture(9),控件数组,控件数组的建立 设计时建立控件数组 首先在窗体上建立一个控件,并设置其属性。 复制该控件到设置位置,这时系统将弹出确认是否要建立一个控件数组的对话框,选择“是”按钮,即可建立控件数组。控件数组中的其余按钮,通过“粘贴”得到,控件数组,程序运行时添加控件数组 首先在窗体上建立一个控件 ,设置该控件的Index属性值为0. 通过方法Load添加其余所需元素(删除添加的元素用Unload方法) 添加的按钮在窗体中的位置由按钮的Left和Top属性值确定,设定Visible属性为True,控件数组,控件数组的引用 引用控件数组中各控件对象的方法是: 控件数组名(索引号),控件数组,例:,控件数组,Private Sub Form_Load() Dim widthnum As Integer, Heighunm As Integer, i As Integer widthnum = cmdnum(0).Width heightnum = cmdnum(0).Height,For i = 1 To 9 Load cmdnum(i) If (i - 1) Mod 3 = 0 Then 第一列 cmdnum(i).Top = cmdnum(i - 1).Top - heighnum - 225 225为行间距 cmdnum(i).Left = cmdnum(0).Left Else 其它列 cmdnum(i).Top = cmdnum(i - 1).Top cmdnum(i).Left = cmdnum(i - 1).Left + cmdnumwith + 720 720为列间距 End If cmdnum(i).Caption = i cmdnum(i).Visible = True Next i End Sub,控件数组,【实例5.5】用控件数组修改第三章的案例简易计算器,并添加数制转换功能:十进制到二进制、十六进制和八进制的转换。,代码编写,数字按钮代码 txtshow.Text = txtshow.Text + cmdnum(Index).Caption sp = Abs(Val(txtshow.Text) 保存十进制代码到窗体级变量sp中,用于进制转换,代码编写,运算符按钮代码 op = cmdoperator(Index).Caption,代码编写,进制转换按钮代码 numd = sp Select Case Optc(Index).Index Case 0 num = 2 Case 1 num = 16 Case 2 num = 8 End Select,While numd 0 c = numd Mod num If c = 10 Then c = c - 10 + Asc(“A“) cs = Chr$(c) Else cs = Str$(c) End If numd = numd num numc = numc + cs Wend txtshow.Text = StrReverse(numc) 字符串逆序,控件,列表框(ListBox) 组合框(ComboBox),控件列表框常用属性,MultiSelect属性 设置列表框是否能选择多项 List属性 该属性是一个字符型数组,存放列表框的项目。List数组的下标是从0开始。 ListCount属性 该属性只能在程序中设置或引用。 ListCount的值是列表框中所列项目的数量,控件列表框常用属性,ListIndex属性 该属性只能在程序中设置或引用。 ListIndex的值是程序运行中选中的列表项的序号。若未选中任何项,则ListIndex的值为-1 Selected属性 该属性只能在程序中设置或引用。 Selected属性是一个逻辑数组,其元素对应列表框中相应的项。若某项被选中其Selected属性值为True,否则为False。,控件列表框常用属性,Sorted属性 该属性只能在程序设置中引用。其值为True列表项目按字母顺序排列显示,否则按项目添加的先后顺序显示。 Style属性 该属性只能在设计时确定。用于设定控件的外观,其值设为0是标准样式,为1时复选框样式,控件列表框常用属性,Text属性 只能在程序中设置或引用,其属性值是被选中列表项中的内容。,控件常用事件和方法,AddItem方法 用于将项目添加到列表框中,其语法为: 列表框名.AddItem Item,index 其中,Item是添加的项目,为字符表达式,Index是可选项,用来指定添加项目在列表框中的位置,如果省略添加到末尾。,控件常用事件和方法,RemoveItem方法 从列表框中删除一个项目,其语法为: 列表框名.RemoveItem Index 其中Index,用来指定要删除的项目在列表框中的位置,控件常用事件和方法,Clear方法 删除列表框中的所有项目,其语法为: 项目列表框.clear,控件组合框的常用属性,Style 属性 Style属性返回/设置一个值,该值用来指示组合框的显示类型和行为,且为只读。其取值如下: 0(默认值)下拉式组合框。由文本框和下拉列表组成,可以输入、可选择、可折叠。 1简单组合框。由文本框和固定列表框组成,可以输入、可选择、不可折叠。 2下拉式列表框。仅由下拉式列表框组成,不可以输入、可选择、可折叠。,控件组合框的常用属性,Text 属性 当Style属性设置为0或1 时,Text属性返回/设置编辑框中的文本;Style属性为2时Text属性返回列表框中选择的项目。,控件常用事件和方法,AddItem方法 Clear方法 RemoveItem方法,控件应用,【实例5.6】制作花卉展示窗体,代码设计,花卉类型选择代码: Private Sub cmbtype_Click() If cmbtype.Text = “玫瑰“ Then lstname.Clear lstname.AddItem “玫瑰1“ lstname.AddItem “玫瑰2“ lstname.AddItem “玫瑰3“,代码设计,Else lstname.Clear lstname.AddItem “菊花1“ lstname.AddItem “菊花2“ lstname.AddItem “菊花3“ lstname.AddItem “菊花4“ End If End Sub,代码设计,花卉名称选择代码: Private Sub lstname_Click() If cmbtype.Text = “玫瑰“ Then Select Case lstname.ListIndex Case 0 imgflower.Picture = LoadPicture(“rose_1.jpg“) Case 1 imgflower.Picture = LoadPicture(“rose_2.jpg“) Case 2 imgflower.Picture = LoadPicture(“rose_3.jpg“) End Select,代码设计,Else Select Case lstname.ListIndex Case 0 imgflower.Picture = LoadPicture(“mum_1.jpg“) Case 1 imgflower.Picture = LoadPicture(“mum_2.jpg“) Case 2 imgflower.Picture = LoadPicture(“mum_3.jpg“) Case 3 imgflower.Picture = LoadPicture(“mum_4.jpg“) End Select End If End Sub,案例成绩分析工具,案例代码设计,添加组合框中项目的代码 Private Sub Form_Load() cbonn.AddItem “Mary,06123“ cbonn.AddItem “John,06124“ cbonn.AddItem “Jeck,06125“ cbonn.AddItem “Paul,06131“ cbonn.AddItem “Tony,06132“ End Sub,案例代码设计,将组合框选中项目添加到文本框(txtin) Private Sub txtin_GotFocus() txtin.Text = txtin.Text + cbonn.Text End Sub,案例代码设计,排“名次”代码 排序代码 查找位置代码,案例代码设计,排序代码 求名次 将每个学生的学号和最后成绩赋值给数组num和score For i = 1 To M num(i) = studentn(i, 2) score(i) = students(i, 4) Next i,案例代码设计,按数组score排序,学号与成绩同步交换 For i = 1 To M - 1 max = i For j = i + 1 To M If score(j) score(max) Then max = j Next j t = score(i): score(i) = score(max): score(max) = t tn = num(i): num(i) = num(max): num(max) = tn Next i,案例代码设计,查找位置代码 找出studentn(i,2)在数组num中的位置,放入数组order For i = 1 To M j = 1 While studentn(i, 2) num(j) j = j + 1 Wend order(i) = j Next 数组order的值为名次。,案例代码设计,成绩分析代码 求出最大、最小及总和 计算各分数段人数及平均值 输出统计结果,案例代码设计,求出最大、最小及总和 Dim max As Single, min As Single, sum As Single, ave As Single Dim ns As Integer, scount(5) As Integer max = students(1, 4) min = students(1, 4),案例代码设计,For i = 1 To M If students(i, 4) max Then max = students(i, 4) Else If students(i, 4) min Then min = students(i, 4) End If End If sum = sum + students(i, 4),案例代码设计,2.计算各分数段人数及平均值 ns = Int(students(i, 4) / 10) Select Case ns Case 9, 10 scount(1) = scount(1) + 1 Case 8 scount(2) = scount(2) + 1 Case 7 scount(3) = scount(3) + 1,案例代码设计,Case 6 scount(4) = scount(4) + 1 Case Is 6 scount(5) = scount(5) + 1 End Select Next i ave = sum / M 平均值,案例代码设计,输出统计结果 For i = 1 To 5 lbls(i - 1).Caption = Str$(scount(i) Next i lbls(5).Caption = max lbls(6).Caption = min lbls(7).Caption = ave,案例代码设计,其它代码 Private Sub cbonn_GotFocus() txtin.Text = “ End Sub,第 6 章,过程,VB应用程序由若干个过程组成。VB有三类模块,即窗体模块、标准模块和类模块。 过程有两个重要作用:一是把一个复杂的任务分解为若干个小任务,可以用过程来表达,从而使任务更易理解,更易实现,将来更易维护;二是代码重用,使同一段代码多次复用。,VB应用程序是由过程组成的,过程是完成某种特殊功能的一组独立的程序代码。两大类过程。 事件过程 Sub过程 通用过程 Function过程 事件过程是当某个事件发生时,对该事件作出响应的程序段,它是VB应用程序的主体。 通用过程是独立于事件过程之外,可供其他过程调用的程序段。,过程调用示例 把相同的任务编成相对独立的“子过程” 当事件过程需要执行这个任务时,可使用调用语句(如Call)实行调用。子过程执行完后,会返回事件过程中调用语句Call的后续语句继续执行 通用过程又分为Sub(子程序)过程和Function(函数)过程,一、 通用过程(引例画圆),例 使用Sub过程的示例1 Private Sub Form_Load() Show Call mysub1(30) Call mysub2 Call mysub2 Call mysub2 Call mysub1(30) End Sub 程序运行结果,Private Sub mysub1(n) Print String(n, “*“) End Sub Private Sub mysub2() Print “*“; Tab(30); “*“ End Sub,Sub过程,Form_Load() 事件过程 Call mysub1(30) Call mysub2 Call mysub2 Call mysub2 Call mysub2 Call mysub1(30),Mysub1过程,Mysub2过程,调用过程,在上述事件过程Form_Load()中,通过Call来分别调用两个Sub过程 在Sub过程mysub1(n)中,n为参数(也称形参),当调用过程(即Form_Load()通过Call mysub1(30)(30称为实参)调用时,就把30传给n,这样调用后就输出30个“*”号 过程mysub2()不带参数,其功能是输出左右两边的“*”号,定义格式: PrivatePublic Static Sub 过程名(参数表) 语句块 Exit Sub End Sub 说明: 局部(Private)过程、全局(公用, Public)过程和静态(Static)过程 参数表定义格式: ByVal |ByRef 变量名 ( )As 数据类型 ByVal表示该参数按值传递,ByRef表示该参数按地址传递 通过参数表传送参数 Sub过程可以获取调用过程传送的参数,也能通过参数表的参数, 把计算结果传回给调用过程。,1. Sub过程的定义,Private Sub Swap(X As Integer, Y As Integer) Dim temp As Integer temp = X: X = Y: Y = temp End Sub Private Sub Command1_Click() Dim a As Integer, b As Integer a = Text1.Text b = Text2.Text Call Swap(a, b) Text1.Text = a Text2.Text = b End Sub,实例1,Sub过程可以保存在两种模块中:窗体模块(.frm)和标准模块(.bas) 可以在代码窗口中直接键入来创建Sub过程 选择“工具”菜单中的“添加过程”命令,2. Sub过程的建立,事件过程是通过事件驱动和由系统自动调用的,而Sub过程则必须通过调用语句实行调用 调用Sub过程有以下两种方法: (1)使用Call语句。格式: Call 过程名(实参表) (2)直接使用过程名,格式: 过程名实参表,3. Sub过程的调用,Private Sub Command1_Click() Call Formmove End Sub 无参过程Sub Fommove( ) 代码: Public Sub Formmove() Form1.Top = (Screen.Height - Form1.Height) / 2 Form1.Left = (Screen.Width - Form1.Width) / 2 End Sub,实例2,允许用户自定义函数过程(又称Function过程) 1定义 Function过程可返回一个值给调用程序 一般语法格式: Private | Public | Static Function 函数名(参数表) As 数据类型 语句块 函数名表达式 Exit Function End Function 函数返回值的处理,二、 Function过程,与Sub过程相同 可以在“代码窗口”中直接输入来建立Function过程 也可以选择“工具”菜单中的“添加过程”命令来建立Function过程(选择“函数”类型),2. Function过程的建立,(1)直接调用 像使用VB内部函数一样,只需写出函数名和相应的参数即可。例如: s = sum(n) Print sum(n) (2)用Call语句调用 与调用Sub过程一样来调用Function过程,例如: Call sum(n) 当用这种方法调用Function过程时,将会放弃返回值,3. Function过程的调用,查看当前模块中有哪些Sub过程和Function过程; 查看其他模块中的过程,4. 查看过程,Public Function tongji(str$, s$) As Integer Dim k%, i% k = 0 For i = 1 To Len(str) 循环依次遍历每个字符 If Mid(str, i, 1) = s Then 判断是否与检测字符相等 k = k + 1 如果相等则计数 End If Next i tongji = k 将结果赋给函数名 End Function 事件过程代码: Private Sub Command1_Click() Dim c1$, c2$, m% c1 = Text1.Text 取出文本框1为原串 c2 = Text2.Text m = tongji(c1, c2) 调用函数过程进行查找 Text3.Text = m End Sub,实例3编写一个函数过程,统计一串字符中某个字符的出现次数,并在调用函数中调用它。,Private Function factorial(ByVal n As Integer) As Double Dim i As Integer, t As Double t = 1 For i = 1 To n t = t * i Next i factorial = t 将结果赋给函数过程名 End Function Private Sub Command1_Click() Dim m As Integer, n As Integer, c As Double m = Val(Text1.Text) n = Val(Text2.Text) c = factorial(m) / (factorial(n) * factorial(m - n) 调用factorial函数过程 Label3.Caption = “共有“ & c & “种选派方法“ End Sub,实例4某班有m名学生,要选派n名学生参加合唱队,计算有多少种选派方法。,参数传递可以实现调用过程和被调过程之间的信息交换 两种方式:按值传递和按地址传递 1 .形参与实参 形式参数(简称形参):在被调过程中的参数。出现在Sub过程和Function过程中,形式参数可以是变量名和数组名 实际参数(简称实参):在调用过程中的参数。过程调用时实参数据会传递给形参 形参表和实参表中的对应变量名可以不同,但实参和形参的个数、顺序以及数据类型必须相同,三、参数传递,调用过程:Call Mysub(100, “计算机“ , 1.5) 定义过程:Sub Mysub(t As Integer,s As String,y As Single) “形实结合”是按照位置结合的,即第一个实参值(100)传送给第一个形参t,第二个实参值(“计算机”)传送给第二个形参s,第三个实参值(1.5)传送给第三个形参y。 数组可以作为形参出现在过程的形参表中,定义过程和调用过程的示例:,1)按地址传递 VB默认的数据传递方式。 按地址传递(关键字ByRef):把实参变量的内存地址传递给被调过程(如Sub过程),即形参与实参使用相同的内存地址单元,这样通过过程就可以改变变量本身的值 实参必须是变量,不能采用常量或表达式。 上个例子中,Form_Load()事件过程是通过“Call Jc(5,y)”和“Call Jc(10,y)”来调用过程Jc(n,t)的,其中采用的第二个参数就是按地址来传送数据的,2、按地址传递和按值传递,按值传递(关键字ByVal):通过常量传递实际参数,即传递参数值而不是传递它的地址 因为通用过程不能访问实参的内存地址,因而在通用过程中对形参的任何操作都不会影响实参,2) 按值传递,Private Sub S1(ByVal x As Integer, ByVal y As Integer) Dim temp As Integer temp = x: x = y: y = temp End Sub Private Sub S2(ByRef x As Integer, y As Integer) Dim temp As Integer temp = x: x = y: y = temp End Sub Private Sub Command1_Click() Dim a As Integer Dim b As Integer a = 20: b = 30 Print “调用前a 和b的值为:“; Tab(30); a; b Call S1(a, b) Print “调用s1后a 和 b 的值为:“; Tab(30); a; b a = 20: b = 30 Call S2(a, b) Print “调用s2后 a和b 的值为:“; Tab(30); a; b End Sub,实例5数值交换,设置两个通用过程Test1和Test2,分别按值传递和按地址传递 Private Sub Form_Load() Dim x As Integer Show x = 5 Print “执行test1前,x=“; x Call test1(x) Print “执行test1后,test2前,x=“; x Call test2(x) Print “执行test2后,x=“; x End Sub,Sub test1(ByVal t As Integer) t = t + 5 End Sub Sub test2(s As Integer) s = s - 5 End Sub,运行结果 执行Test1前,x=5 执行Test1后,Test2前,x=5 执行Test2后,x=0,例 参数传递方式示例,变量的作用域(空间)和生存期(时间) 应用程序通常包括窗体文件(.frm)、模块文件(.bas)和类模块(.cls),五、变量的作用范围,程序一般从启动窗体的Form_Load过程开始执行 有时在程序启动时不加载任何窗体,而是首先执行一段程序代码,此时可把要执行的程序代码放在Sub Main过程中,并指定Sub Main为“启动对象”。应用程序在运行时会先执行Sub Main过程 在一个工程中只能有一个Sub Main过程 设置Sub Main过程为“启动对象”的方法:在“工程属性”对话框的“通用”选项卡中,从“启动对象”下拉列表框中选中“Sub Main”,(一)Sub Main过程,变量根据所处的位置或定义不同,其作用范围也不同,分为:局部变量、模块级变量和全局变量 1. 局部变量 在一个过程内部用Dim或Static声明的变量称为局部变量。只能在本过程中有效。在一个窗体中,不同过程中定义的局部变量可以同名。例如,在一个窗体中定义 Private Sub Command1_Click() Dim Count As Integer Dim Sum As Integer . . . End Sub Private Sub Command2_Click() Dim Sum As Integer . . . End Sub,这两个同名变量Sum没有任何联系,(二)变量的作用域,模块级变量可以在一个窗体的不同过程中使用 在窗体模块的声明部分中声明该变量 如果用Private或Dim来声明,则该变量只能在本窗体(或本模块)中有效,在其他窗体或模块中不能引用该变量。 以Public声明的变量,允许在其他窗体和模块中引用,2. 模块级变量,全局变量可以被应用程序中任何一个窗体和模块直接访问。 全局变量要在标准模块文件(.bas)中的声明部分用Global或Public语句来声明。 格式: Global 变量名 As 数据类型 Public 变量名 As 数据类型,3. 全局变量,比较:,Option Explicit Dim x% Private Sub Form_click() x = 33 Print “x=“; x Call li1 Call li2 print x1 不可使用局部变量x1 End Sub Private Sub li1() Dim x1% x1 = 11 Print “x1=“; x1, Print “x=“; x 可以使用窗体/模块级变量 End Sub Private Sub li2() Dim x2% x2 = 22 Print “x2=“; x2, Print “x=“; x End Sub,实例6模块级变量与局部变量应用实例,生存期,也即变量能够保持其值的时间,分为动态变量和静态变量 1)动态变量 动态变量是指程序运行进入变量所在的过程时,才分配给该变量的内存单元,经过处理退出该过程时,该变量占用的内存单元自动释放,其值消失。当再次进入该过程时,所有的动态变量将重新初始化。 使用Dim关键字在过程中声明的局部变量属于动态变量。,4、变量的生存期,静态变量是指程序进入该变量所在的过程,经过处理退出该过程时,其值仍被保留,即变量所占的内存单元没有释放。当以后再次进入该过程时,原来的变量值可以继续使用 使用Static关键字在过程中声明的局部变量属于静态变量 例 使用Static Sub语句的示例 Static Sub Subtest() Dim t As Integer t为静态变量 t = 2 * t + 1 Print t End Sub Private Sub Command1_Click() Call Subtest 调用子过程Subtest End Sub,2) 静态变量的使用,运行后,多次单击命令按钮Command1,执行结果为: 1 3 7 将Static Sub改为Private Sub后,运行过程中多次单击命令按钮Command1,执行结果为: 1 1 1 ,Private Sub Form_click() Dim count% count = count + 1 Print “单击窗体“; count; “次“ End Sub Private Sub Form_click() Static count% count = count + 1 Print “单击窗体“; count; “次“ End Sub,实例7,六、综合案例,七、案例实训,第 7 章,文件,前面的章节,我们都是将输出结果显示在窗体、标签等控件上的。 ? 如果我们要将程序运行产生的有效数据长期保存下来,以便存档、用户随时查阅或更新。 !保存在磁盘上文件,文件是指存放在外存储器(如磁盘)上的信息集合。 使用文件可以将应用程序所处理的数据以文件的形式保存起来。 本章主要内容,文件系统控件,数据文件概述,顺序文件读写,随机文件读写,常用的文件操作和函数,一、文件系统控件,VB工具箱中提供了三种文件系统控件:驱动器列表框(DriveListBox)、文件夹列表框(DirListBox)和文件列表框(FileListBox)。 这三种控件可以单独使用,也可以组合使用。图为三种控件组合使用的情况,(1)驱动器列表框:选择一个驱动器 (2)文件夹列表框:显示一个磁盘的文件夹结构。 (3)文件列表框:显示当前文件夹下的所有文件名。,驱动器、目录和文件列表框的关联,Sub drvDrive_Change() dirDirectory.Path = drvDrive.Drive End Sub,Sub dirDirectory_Change() filFile.Path = dirDirectory.Path End Sub,Sub Form_Load() Item = “所有文件(*.*)” cboType.AddItem Item + Space(20 - Len(Item) + “*.*“ Item = “窗体文件(*.FRM)“ cboType.AddItem Item + Space(20 - Len(Item) + “*.FRM“ Item = “位图文件(*.BMP)“ cboType.AddItem Item + Space(20 - Len(Item) + “*.BMP“ cboType.ListIndex = 2 End Sub Sub cboType_Click() filFile.Pattern = Mid(cboType.Text, 21) End Sub,Sub filFile_Click( ) End Sub Sub filFile_DblClick( ) End Sub,当这三种控件组合使用时,在改变驱动器列表框中的驱动器时, 文件夹列表框中显示的文件夹也应同步改变。 同样,文件夹列表框中文件夹
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电线电缆维护知识培训总结
- 电站电工基础知识培训内容
- 电磁波的传播方式
- 北森测评试题及答案考试时间
- 北京滴滴专车考试题目及答案
- 电焊工焊接知识培训内容课件
- 中考试题及答案英语答案
- 高新区职称课件
- 高层过道消防知识培训课件
- 2025年绿色照明项目立项申请报告模板
- 《ACT就这么简单》课件
- 农机行政处罚流程图
- 沥青混合料低温弯曲试验2002363
- 盘阀结构和原理课件
- 《普通逻辑》全册课后练习题参考答案(含原题)
- 环境、环境问题与环境科学
- 新版(七步法案例)PFMEA
- 会计师事务所7(报告流转签发制度12)
- 01血涂片、红细胞形态PPT课件
- 高二年级开学学生大会年级主任的讲话[001]
- 以内加减法口算100题可直接打印
评论
0/150
提交评论