《VB第7章电子讲稿(过程)》由会员分享,可在线阅读,更多相关《VB第7章电子讲稿(过程)(57页珍藏版)》请在金锄头文库上搜索。
1、 本章主要内容通用过程Sub过程/Function过程参数传递过程的嵌套与递归调用变量的作用范围多窗体与Sub Main过程程序举例第7章 过 程思考已知多边形各条边的长 度,计算多边形的面 积。计算多边形面积,可将 多边形分解成若干个 三角形。计算三角形 面积的公式如下:VB应用程序是由过程组成的,过程是完成某种特 殊功能的一组独立的程序代码。两大类过程。事件过程Sub过程通用过程Function过程事件过程是当某个事件发生时,对该事件作出响应 的程序段,它是VB应用程序的主体通用过程是独立于事件过程之外,可供其他过程调用 的程序段过程调用示例 把相同的任务编成相对独立的“子过程”当事件过程
2、需要执行这个任务时,可使用调用语句(如 Call)实行调用。子过程执行完后,会返回事件过程中调用 语句Call的后续语句继续执行通用过程又分为Sub(子程序)过程和Function(函数)过程调用过程Call SubACall SubACall SubB子过程SubA子过程SubB7.1 通用过程lSub子过程:完成一定的操作和功能,无 返回值。lFunction函数过程:完成一定的操作和功 能,并且可将数据处理的结果返回。允许用户自定义函数过程(又称Function过程)1定义Function过程可返回一个值给调用程序一般语法格式: Public |Private Function函数过程(
3、形参)As 类型变量声明语句块Return 表达式 或 函数名=表达式 End FunctionPublic 全局函数过程,可被程序任何模块调用 Private 仅供本模块中的其它过程调用 形参(或称哑元) 只能是变量或数组名( ),仅表示参数的个数、类 型,无值。7.1.1 Function过程可以在“代码窗口”中直接输入来建立 Function过程也可以选择“工具”菜单中的“添加过程”命 令来建立Function过程(选择“函数”类型) 2. Function过程的建立例7.1 编写一个求最大公约数函数Function gys(m%,n%) as integerdim t%,r%if m0
4、m=n:n=r:r=m mod nloopgys=n End function(1)直接调用像使用VB内部函数一样,只需写出函数名和相应的参 数即可。例如:s = Max(a, b)Print Max(s, c)(2)用Call语句调用与调用Sub过程一样来调用Function过程,例如:Call Max(a, b)当用这种方法调用Function过程时,将会放弃返回值3. Function过程的调用例7.2 调用例7.1Private Sub Form_click() Dim x%, y%x = Val(InputBox(“)y = Val(InputBox(“)g = gys(x, y)P
5、rint g End SubPrivate Sub Form_click() Dim x%, y%, z%x = Val(InputBox(“)y = Val(InputBox(“)z = Val(InputBox(“)g = zd(x, y, z)Print g End SubFunction zd(a%, b%, c%) As IntegerDim max%max = aIf max n ThenMsgBox “输入数据错误“, 0, “检查错误“EndEnd IfPrint “组合数是:“; Calcomb(n, m)End SubPrivate Function Calcomb(n,
6、m)Calcomb = Jc(n) / (Jc(m) * Jc(n - m)End FunctionPrivate Function Jc(x)t = 1For i = 1 To xt = t * iNext iJc = tEnd Function程序中,采用了过程的嵌套调用方式 。在事件过程Form_Load()中调用了 Calcomb过程,而在Calcomb过程中调用 了三次jc过程。一个过程调用过程本身,就称为过程的递归调用采用递归方法来解决问题时,必须符合以下两个条件:(1)可以把要解的问题转化为一个新的问题,而这个新的问题的解法仍与原来的解法相同;(2)有一个明确的结束递归的条件(终
7、止条件),否则过程将永远“递归”下去7.3.2 过程的递归调用例7.9 采用递归方法变量的作用域(空间)和生存期(时间)7.4.1 代码模块的概念 应用程序通常包括窗体文件(.frm)、模块文件(.bas)和类模块 (.cls)应用程序 工程文件 (.vbp)窗体模块 文件(.frm)Sub 过程Function 过程事件 过程声明 部分类模块 文件(.cls)标准模块 文件(.bas)Sub 过程Function 过程声明 部分Sub Main 过程7.4 变量的作用范围变量根据所处的位置或被定义不同,其作用范围也不同局部变量、模块级变量和全局变量1. 局部变量在一个过程内部用Dim或Sta
8、tic声明的变量称为局部变量。 只能在本过程中有效。在一个窗体中,不同过程中定义的局部 变量可以同名。例如,在一个窗体中定义Private Sub Command1_Click()Dim Count As IntegerDim Sum As Integer. . . End SubPrivate Sub Command2_Click()Dim Sum As Integer. . . End Sub这两个同名变量Sum没有任何联系7.4.2 变量的作用域模块级变量可以在一个窗体的不同过程中使用在窗体模块的声明部分中声明该变量如果用Private或Dim来声明,则该变量只能在本窗体( 或本模块)中
9、有效,在其他窗体或模块中不能引用该变量。以Public声明的变量,允许在其他窗体和模块中引用2. 模块级变量全局变量可以被应用程序中任何一个窗体和 模块直接访问。全局变量要在标准模块文件(.bas)中的声明部 分用Global或Public语句来声明。格式:Global 变量名 As 数据类型Public 变量名 As 数据类型3. 全局变量在窗体上画一个名称为Commandl的命令按钮,再画两 个名称分别为Label1、Label2的标签,然后编写如下 代码:Private x As Integer Private Sub Commandl_Click() X = 5:Y = 3 Call
10、proc(X, Y)Label1.Caption = X Label2.Caption = Y End Sub Private Sub proc(Byval a As Integer, Byval b As Integer) X = a * a Y = b + b End Sub 程序运行后,单击命令按钮,则两个标签中显示的内容 分别是( )。 5和3 B)25和3 C)25和6 D)5 和6生存期,也即变量能够保持其值的时间 分为动态变量和静态变量1. 动态变量动态变量是指程序运行进入变量所在的过程时,才分配给 该变量的内存单元,经过处理退出该过程时,该变量占用的内 存单元自动释放,其值消失
11、。当再次进入该过程时,所有的动 态变量将重新初始化。使用Dim关键字在过程中声明的局部变量属于动态变量7.4.3 变量的生存期 静态变量是指程序进入该变量所在的过程,经过处理退出 该过程时,其值仍被保留,即变量所占的内存单元没有释放。 当以后再次进入该过程时,原来的变量值可以继续使用使用Static关键字在过程中声明的局部变量属于静态变量例7.11 使用Static Sub语句的示例 Static Sub Subtest()Dim t As Integer t为静态变量t = 2 * t + 1Print tEnd SubPrivate Sub Command1_Click()Call Sub
12、test 调用子过程SubtestEnd Sub2. 静态变量运行后,多次单击命令按钮Command1,执行结果为:137 将Static Sub改为Private Sub后,运行过程中多次单击命 令按钮Command1,执行结果为:1117.5.1 多窗体处理在多窗体程序中,每个窗体可以有自己的界面和程序代码 ,完成不同的操作 1. 添加窗体 通过“工程”菜单中的“添加窗体”命令来实现 2. 删除窗体 选择“工程”菜单中的“移除”命令 3. 保存窗体 选择“文件”菜单中的“保存”或“另存为”命令 4. 设置启动窗体 在“工程属性”对话框中设置 7.5 多窗体与Sub Main过程Load语句
13、:把一个窗体装入内存UnLoad语句:清除内存中指定的窗体Show方法:显示一个窗体Hide方法:隐藏窗体。即不在屏幕上显示,但仍在内存中,因此它与UnLoad的作用是不一样的 5. 有关语句和方法 创建3个窗体和1个标准模块 (1)主窗体(Form1)本窗体上建立了“输入参数”(Command11) 、“画圆 ”(Command12)和“结束”(Command13)三个命令按钮 设置为启动窗体例7.12 多窗体应用示例Private Sub Command11_Click() 主窗体“输入参数”按钮Form1.Hide 隐藏主窗体Form2.Show 显示“输入参数”窗体 End Sub P
14、rivate Sub Command12_Click() 主窗体“画圆”按钮Form1.Hide 隐藏主窗体Form3.Show 显示“画圆”窗体 End Sub Private Sub Command13_Click() 主窗体“结束”按钮Unload Form1Unload Form2Unload Form3End End Sub先卸载所有已 打开的窗体(2)“输入参数”窗体(Form2)这是在主窗体上单击了“输入参数”按钮后弹出的窗体, 用于输入圆的坐标位置(x,y)和半径(r)。窗体上建立了3个文本 框(Text21、Text22和Text23)和1个“返回”命令按钮 (Command
15、21) Private Sub Command21_Click() “输入参数”窗体的“返回”按 钮X = Val(Text21.Text)Y = Val(Text22.Text)R = Val(Text23.Text)Form2.Hide 隐藏“输入参数”窗体Form1.Show 显示主窗体End Sub(3)“画圆”窗体(Form3)这是在主窗体上单击了“画圆”按钮后弹出的窗体。窗 体上建立了1个图片框和2个命令按钮,如图7.10所示。用户 可以单击“画圆”(Command31)命令按钮,使之按给定参数在 图片框上画圆。Private Sub Command31_Click() “画圆”窗体的“画