VB程序设计第二版第七章_第1页
VB程序设计第二版第七章_第2页
VB程序设计第二版第七章_第3页
VB程序设计第二版第七章_第4页
VB程序设计第二版第七章_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 2 ,也称为,也称为“子过程子过程”或或“子程序子程序” 。 调用调用 事件过程或其他通用过程使用另一个通用过程称事件过程或其他通用过程使用另一个通用过程称 为调用。为调用。 调用过程调用过程 调用子过程的过程称为调用子过程的过程称为“调用过程调用过程”。 3 调用过程调用过程: 调用调用Sprg1 调用调用Sprg1 调用调用Sprg2 子过程子过程: Sprg1 子过程子过程: Sprg2 过程的执行:过程的执行: 4 过程分类过程分类: : Sub过程过程 Function过过 程程 内部过程内部过程(方法方法) 事件过程事件过程 自定义过程自定义过程 内部函数内部函数 自定义函数自

2、定义函数 其中,自定义函数和自定义过程统称为其中,自定义函数和自定义过程统称为 通用过程通用过程 5 7.1.1 事件过程事件过程 VB程序是事件驱动的。程序是事件驱动的。 事件过程分为窗体事件过程分为窗体 事件过程和控件事件过程。事件过程和控件事件过程。 1.窗体事件过程:窗体事件过程: 定义:定义: Private sub Form_事件名(事件名(参数列表参数列表) 语句语句 End sub 6 说明:说明: (1)窗体的事件过程由)窗体的事件过程由Form、下划线、下划线 和事件名组成。和事件名组成。 (2)private表示这个事件过程是局部的,表示这个事件过程是局部的, 只有本窗体

3、有效。只有本窗体有效。 (3)事件名由)事件名由VB系统提供。系统提供。 (4)窗体过程有无参数,由)窗体过程有无参数,由VB提供的具提供的具 体事件决定,用户不可以随意添加或者更体事件决定,用户不可以随意添加或者更 改或者删除。改或者删除。 7 2.控件事件过程控件事件过程 格式:格式: Private Sub 控件名控件名_事件名(事件名(参数列表参数列表) 语句语句 End sub 说明:说明: (1)窗体的事件过程由控件名、下划线)窗体的事件过程由控件名、下划线 和事件名组成。和事件名组成。 (2)private表示这个事件过程是局部的,表示这个事件过程是局部的, 只有本窗体有效。只有

4、本窗体有效。 (3)窗体过程有无参数,由)窗体过程有无参数,由VB提供的具提供的具 体事件决定,用户不可以随意添加或者更体事件决定,用户不可以随意添加或者更 改或者删除。改或者删除。 8 【例【例7-1】 窗体过程应用示例:创建窗体的窗体过程应用示例:创建窗体的 Initialize、Load、Activate、GotFocus事件过事件过 程,分别在立即窗口打印相应的信息,观察各个程,分别在立即窗口打印相应的信息,观察各个 窗体过程执行的顺序。窗体过程执行的顺序。 程序代码如下:程序代码如下: Private Sub Form_Activate() Debug.Print 触发了触发了Act

5、ivate事件事件 End Sub Private Sub Form_GotFocus() Debug.Print 触发了触发了GotFocus事件事件 End Sub 9 Private Sub Form_Initialize() Debug.Print 触发了触发了Initialize事件事件 End Sub Private Sub Form_Load() Debug.Print 触发了触发了Load事件事件 End Sub 10 【例【例7-2】 控件过程应用示例:在运行程序控件过程应用示例:在运行程序 时,触发文本框的时,触发文本框的Keypress事件过程,在标事件过程,在标 签中显

6、示用户敲击的键名。签中显示用户敲击的键名。 程序代码如下:程序代码如下: Private Sub Text1_KeyPress(KeyAscii As Integer) Text1.Text = Label1.Caption = 你敲击了你敲击了 For j = 1 To 2 * i - 1 Print *; Next j Print Next i End Sub 27 在在VB中,有如中,有如Sin函数、函数、Sqr函数等内部函数。函数等内部函数。 而程序员也可以自己定义函数。自定义函数通过而程序员也可以自己定义函数。自定义函数通过 Function过程实现。过程实现。 Function过程

7、也称为函数过程。过程也称为函数过程。 7.2.1 Function过程的定义 Function过程的格式 28 Public|PrivateStatic Function 函数过程名函数过程名 () As 函数过程名函数过程名 = Exit Function End Function 函数过程体函数过程体 2. 说明 (1) Public: 缺省值。使用Public时表示各 模块的所有其他过程都可以调用该过程。 (2) Private: 使用Private时表示只有本模 块中的其他过程才可以调用该Function过程。 (3) Static: 使用Static时表示将过程中的 所有局部变 量说

8、明为静态变量。 (4) 函数过程名: Function过程的名称,遵 循变量的命名规则。 (5) : 表示Function过程的参数变 量列表。多个变量之间用逗号隔开。格式: ByVal|ByRef ( ) As 29 ByVal: 表示该参数按值传递。 ByRef: 缺省值。表示该参数按地址传递。 : 任何变量名或数组名。 ( ): 当参数为数组时使用。 (6) As : 声明函数值的类型。 (7) Exit Function语句: 从Function过程 中退出。 (8) Function过程通过赋值语句: 函数过程名= 将函数的返回值赋给。 (9) Function过程的定义不能嵌套。

9、函数过程应该建立在模块的通用声明段。 30 31 7.2.2 Function过程的调用过程的调用 1. 调用位置调用位置 直接在表达式中调用。直接在表达式中调用。 2. 调用格式调用格式 (1)函数过程名:必须是一个已定义的函数过程的)函数过程名:必须是一个已定义的函数过程的 名称。名称。 (2)实参表:指要传递给函数过程的常量、变量或)实参表:指要传递给函数过程的常量、变量或 表达式,各参数之间用逗号分隔。如果参数是数组,表达式,各参数之间用逗号分隔。如果参数是数组, 在数组名之后必须跟一对空括号。在数组名之后必须跟一对空括号。 函数过程名函数过程名(实参表实参表) Sub过程和funct

10、ion 过程的区别 1.Function过程有返回值,因此函数必须定义 类型,同时在函数过程体内必须对函数过程名 赋值。 Sub无返回值,不需要定义类型和内部赋值。 2.到底采用哪种过程,一般情况下,通过一个 过程求一个值,定义为function直观些;求多 个值或者完成一组操作,用Sub过程。 32 【例7-5】 输入自然数a,b,c,计算 p=a!+b!+c!。要求:编写一个Function过程, 计算阶乘。在“计算”按钮的Click事件中调 用该过程,计算p并在文本框中显示计算结 果。 在例7-5中将用Function过程完成例7-3的功 能。 程序代码如下: 33 Dim a%, b%

11、, c%, f#, p#, i% Private Sub Command1_Click() a = Val(Text1.Text) b = Val(Text2.Text) c = Val(Text3.Text) p = fact(a) + fact(b) + fact(c) 调用函数过程计算各个阶乘 Text4.Text = Format(p, 0.000) End Sub 34 Function fact(n As Integer) As Double 求阶乘的函数过程 f = 1 For i = 1 To n f = f * i Next fact = f End Function 35

12、【例7-6】 求两个自然数的最大公约数和最小公倍数。 要求在文本框中输入两个自然数,编写函数过程,求两个 数的最大公约数和最小公倍数,在窗体的Click事件中, 调用函数,计算结果。 假设过程名为gcd,需要设置两个参数x, y,求x, y的最 大公约数可以使用辗转相除法。具体如下: (1) 以第一个数x作为被除数,第二个数y作为除数,求余 数r。 (2) 如果r不为0,则将除数y作为新的被除数x,而将余数 r作为新的除数y,再进行相除,得到新的余数r。 (3) 如果r不为0,则重复步骤(2)。如果r为0,则这时的 除数就是最大公约数。 36 Option Explicit Dim a%, b

13、%, r%, t%, p% Function gcd(ByVal x As Integer, ByVal y As Integer) As Integer 求最大公约数的 函数过程 If x y Then t = y: y = x: x = t 保证x始 终大于y Do While y 0辗转相除求最大公约数 r = x Mod y x = y y = r Loop gcd = x End Function 37 Function lcm(x, y, m) As Integer 求 最小公倍数的函数过程 lcm = x * y / m 最小公倍数等于两个数的乘积 除以它们的最大公约数 End

14、Function Private Sub Form_click() a = Val(Text1.Text) b = Val(Text2.Text) Text3.Text = gcd(a, b) 调 用函数过程求最大公约数 Text4.Text = lcm(a, b, gcd(a, b)调 用函数过程求最小公倍数 End Sub 38 39 参数传递参数传递是指是指调用过程与被调用过程之间的一种调用过程与被调用过程之间的一种 数据通讯方法。数据通讯方法。 数据的传递方式可以是:数据的传递方式可以是: 单向的单向的按值传递按值传递 双向的双向的按地址传递按地址传递 数据传递是通过数据传递是通过形参

15、形参和和实参实参进行传递的。进行传递的。 7.3.1 形参和实参 形参: 出现在Sub或Function语句中。 实参: 出现在调用程序中。 例如,定义如下一个过程: Sub SubTest(n As Integer,Sum As Single) End Sub 调用语句: Call SubTest( a , s ) 40 形参形参 实参实参 41 说明说明: 一般情况下,形参表与实参表中对应参数个数、一般情况下,形参表与实参表中对应参数个数、 类型、位置顺序必须一一对应。类型、位置顺序必须一一对应。 形参表中的参数可以是形参表中的参数可以是: 除固定长度字符串之外的合法变量名、数组名除固定长

16、度字符串之外的合法变量名、数组名() 实参表中的参数可以是实参表中的参数可以是: 常量、变量、表达式、数组名常量、变量、表达式、数组名() 形参与实参的结合有两种方式形参与实参的结合有两种方式: 按值传递和按地址传递。按值传递和按地址传递。 42 7.3.2 按地址传递按地址传递(引用)(引用) 指将实参的地址传给形参,使形参和实参具指将实参的地址传给形参,使形参和实参具 有相同的地址,即形参与实参共享同一存储单元。有相同的地址,即形参与实参共享同一存储单元。 (1) 当实参为变量或数组时,形参使用关键字当实参为变量或数组时,形参使用关键字 ByRef定义定义(或省略或省略)表示要按地址传递。

17、表示要按地址传递。 (2) 当参数是数组时,数组名之后必须使用一当参数是数组时,数组名之后必须使用一 对空的圆括号。对空的圆括号。 按地址传递可以实现调用过程与子过程之按地址传递可以实现调用过程与子过程之 间数据的间数据的双向传递双向传递。 【例7-7】 定义了如下的函数过程: Option Explicit Public Function f(x As Integer) Dim y As Integer x = 10: y = 3: f = x * y End Function 在命令按钮的Click事件过程如下: Private Sub Command1_Click() Dim x As

18、Integer, y As Integer x = 30: y = 3: y = f(x) Print x; y End Sub 43 Sub SS(ByRef X, ByRef Y, ByRef Z) X = X + 1: Y = Y + 1: Z = Z + 1 End Sub 而命令按钮Command1的Click事件过程如下: Private Sub Command1_Click() A = 1: B = 2: C = 3 Call SS(A, B, C) Print A, B, C End Sub 44 【补充补充】设定义了以下设定义了以下SS过程:过程: 形参形参: X Y Z 实

19、参实参: A B C 存储单元存储单元 45 实参:实参: A B C 1 2 3 形参:形参: X Y Z 存储单元:存储单元: 实参:实参: A B C 2 3 4 形参:形参: X Y Z 存储单元:存储单元: 执行执行Call语句,进入过程时语句,进入过程时 从过程返回时从过程返回时 运行时,单击命令按钮在窗体上打印运行时,单击命令按钮在窗体上打印: 2 3 4 46 7.3.3 按值传递按值传递 实参把其值传递给形参而不传递实参的地址。实参把其值传递给形参而不传递实参的地址。 数据的传递是单向的。数据的传递是单向的。 (1) 当实参为常量或表达式时,数据传递总是单向当实参为常量或表达

20、式时,数据传递总是单向 的。的。 例如例如: Sub Test( n As Integer,Sum As Single) Call Test(10, 1+2) 47 【补补】设定义了以下过程】设定义了以下过程SS: Sub SS(ByVal X, ByVal Y, ByVal Z) X = X + 1 : Y = Y + 1 : Z = Z + 1 End Sub 命令按钮命令按钮Command1的的Click事件过程如下:事件过程如下: Private Sub Command1_Click() A = 1: B = 2: C = 3 Call SS(A, B, C) 在这里调用在这里调用SS

21、子过程子过程 Print A, B, C End Sub 48 因此,运行时单击命令按钮,在窗体上打印:因此,运行时单击命令按钮,在窗体上打印: 1 2 3 1 2 31 2 3 1 2 31 2 3 实参:实参: A B CA B C 形参:形参: X Y ZX Y Z 1 2 31 2 3 2 3 42 3 4 实参:实参: A B CA B C 形参:形参: X Y ZX Y Z 执行执行Call语句,进入过程时语句,进入过程时 从过程返回时从过程返回时 【例7-8】 有如下的程序: Private Sub Form_click() Dim a As Integer, b As Inte

22、ger a = 20: b = 50 p1 a, b: p2 a, b: p3 a, b Print a=; a, b=; b End Sub 49 Sub p1(x As Integer, ByVal y As Integer) x = x + 10: y = y + 20 End Sub Sub p2(ByVal x As Integer, y As Integer) x = x + 10: y = y + 20 End Sub Sub p3(ByVal x As Integer, ByVal y As Integer) x = x + 10: y = y + 20 End Sub 50

23、【例7-9】 编写一个函数过程,计算x的y次方,其中y0。 单击窗体时调用该函数过程,打印51、52、53、54、55的结 果。程序代码如下: Option Explicit Dim r As Single, i As Integer Function power(x As Integer, ByVal y As Integer) r = 1 Do While y 0 r = r * x y = y -1 Loop power = r End Function 51 Private Sub Form_click() For i = 1 To 5 r = power(5, i) Print r;

24、 Next i End Sub 52 53 7.3.4 使用数组参数使用数组参数 使用数组作为参数时只能按地址传递,不能使用数组作为参数时只能按地址传递,不能 按值传递。当参数是数组时,数组名之后需要使按值传递。当参数是数组时,数组名之后需要使 用一对空的圆括号。用一对空的圆括号。 【例7-10】 编写一个Sub过程,将数组元 素中的数据倒置。 程序代码如下: Option Explicit Sub swap(a() As Integer) 定义sub过 程,将数组作为形参,不能定义数组的上下 界 Dim i As Integer, t As Integer For i = LBound(a(

25、) To UBound(a() / 2 在过程中,用LBound()和UBound() 54 获得数组的上界和下界 将第一个与最后一个交换,第二个与倒数 第二个交换,.,第I个与第(UBound(a() + 1 -i) 个交换 t = a(i) a(i) = a(UBound(a() + 1 -i) a(UBound(a() + 1 -i) = t Next i End Sub 55 Private Sub Form_click() Dim n As Integer, i As Integer Dim a() As Integer n = Val(InputBox(请输入数组的个数: ) Re

26、Dim a(1 To n) For i = 1 To n Randomize a(i) = Int(Rnd * 20) Text1.Text = Text1.Text 其次编写另外一个函数过程求各项的和。其次编写另外一个函数过程求各项的和。 Option Explicit Function sum(n As Integer) As Double Dim i As Integer sum = 0 For i = 1 To n sum = sum + i Next i End Function Function sigma(n As Integer) As Double Dim i As Inte

27、ger For i = 1 To n sigma = sigma + 1 / sum(i) 在在sigma()函数过程中调用函数过程中调用sum()函数函数 Next i End Function Private Sub Command1_Click() Text1.Text = Format(sigma(10), 0.00000000000000) 在事件过程中调用在事件过程中调用sigma()函数函数 End Sub 窗体模块窗体模块(Form) (文件扩展名文件扩展名) 标准模块标准模块(Module) (文件扩展名文件扩展名) 类模块类模块(Class) (文件扩展名文件扩展名) 7.

28、5 Visual Basic工程结构工程结构 “工程添加窗体工程添加窗体” “工程添加模块工程添加模块” “工程添加类模块工程添加类模块” 7.5.1 模块的分类模块的分类 一个应用程序可以由一个应用程序可以由组成组成.vbp-工程文件工程文件 多个工程组成多个工程组成.vbg-工程组文件工程组文件 “文件文件|添加工程添加工程” “工程工程|添加窗体添加窗体/ 添加模块添加模块/ 添加类模块添加类模块” 窗体模块包含:窗体模块包含:通用声明通用声明(常量、变量、数组、常量、变量、数组、 外部过程外部过程)、事件过程、通用过程。事件过程、通用过程。 可以用可以用查看查看 一个一个窗体模块包含窗

29、体模块包含了了界面界面和和代码代码两部分信息两部分信息 当一个当一个应用程序含有应用程序含有多个窗体多个窗体时时,如果有如果有多个窗体多个窗体 都需要调用某都需要调用某一段公共过程一段公共过程,或需要共享常量、变或需要共享常量、变 量等量等,则可以将则可以将这种过程这种过程或或常量、变量的声明常量、变量的声明建立建立 在在标准模块标准模块内内,定义为定义为全局常量、变量全局常量、变量或或过程过程,供各供各 个窗体模块使用。个窗体模块使用。 2. 工程工程添加模块添加模块选选“新建新建”标签标签打开打开 “添加模块添加模块”对话框。对话框。 默认名字:默认名字:ModuleXModule1,Mo

30、dule2. 2. 标准模块标准模块不对应于某个窗体、不对应于某个窗体、是是纯代码模纯代码模 块块,因此因此标准模块标准模块中中没有事件过程没有事件过程。 3. 标准模块可以包含标准模块可以包含: 全局常量全局常量、变量、全局过、变量、全局过 程;及程;及标准模块级常量标准模块级常量、变量、通用过程。、变量、通用过程。 4. 存盘时每个存盘时每个标准模块标准模块对应一个对应一个.Bas文件文件,默认默认 文件主名文件主名module1,. 标准模块的添加标准模块的添加 3. 类模块类模块 类类是具有相同或相似特征的事物的集合是具有相同或相似特征的事物的集合,类封类封 装了对象的属性和方法。装了

31、对象的属性和方法。 程序员一般不对类进行操作程序员一般不对类进行操作,而只能对类的实而只能对类的实 例例对象进行操作。对象进行操作。 VB所使用的每种控件都对应着一个类所使用的每种控件都对应着一个类,如如 Button按钮控件对应着按钮控件对应着Button类类,它们支持它们支持 封装和多态性封装和多态性,但它们不支持继承但它们不支持继承,即不能从即不能从 现有的类来创建新的类。现有的类来创建新的类。 有时用户需要创建自己的类以实现特定的功有时用户需要创建自己的类以实现特定的功 能能,则可以通过则可以通过类模块类模块创建创建自己的类自己的类。类模块。类模块 文件的的扩展名为文件的的扩展名为.c

32、ls。默认主名。默认主名class1,. 创建类的方法:创建类的方法:“工程添加类模块工程添加类模块” 4. 过程的作用域过程的作用域 1. 模块级过程模块级过程: 在过程前如果在过程前如果加加Private关键关键 字字,则这种过程只能被其所在的模块中的其他则这种过程只能被其所在的模块中的其他 过程所调用。过程所调用。 2. 全局过程全局过程: 在过程前如果在过程前如果加加Public关键字关键字 (或省略或省略),则这种过程可以被其他模块中的过则这种过程可以被其他模块中的过 程所调用。程所调用。调用格式调用格式: 模块名模块名.过程名过程名(参数表参数表) 注意:注意:标准模块标准模块中的

33、中的全局过程名全局过程名如果惟一如果惟一,则则 调用时调用时可以省略可以省略模块名模块名 过程作用域的分类过程作用域的分类: 模块级模块级、全局级全局级 P216 7.5.2 多重窗体多重窗体 多重窗体的概念多重窗体的概念 指在一个窗体内放置或包含了多个其他窗体的结构指在一个窗体内放置或包含了多个其他窗体的结构, 也称也称“多文档界面多文档界面”MDI(Multiple Document Interface),并称该并称该 窗体为窗体为“父窗体父窗体”;被放置或包含的窗体称被放置或包含的窗体称“子窗体子窗体” MDIChild。 1、添加窗体、添加窗体 “工程添加窗体工程添加窗体”;或工具栏中

34、的;或工具栏中的“添加窗体添加窗体”按钮按钮; “添加窗体添加窗体”对话框对话框.对添加的窗体设置其对添加的窗体设置其: MDIChild=true。 2、设置、设置启动窗体启动窗体 “工程工程XX属性属性”“工程属性工程属性”对话框对话框中选择中选择“启动对象启动对象” 3、与多重窗体程序设计有关的语句和方法、与多重窗体程序设计有关的语句和方法 (1)Load语句语句 格式格式: Load 窗体名称窗体名称 功能功能: 将一个窗体装入内存。执行该语句后,可以引用窗体将一个窗体装入内存。执行该语句后,可以引用窗体 中的控件及各种属性,但此时窗体并没有显示出来。中的控件及各种属性,但此时窗体并没

35、有显示出来。 (2)UnLoad语句语句 格式格式:UnLoad 窗体名称窗体名称 功能功能: 将一个窗体从内存中删除。常用语句将一个窗体从内存中删除。常用语句UnLoad me, 表示关闭本窗口。表示关闭本窗口。 3、与多重窗体程序设计有关的语句和方法、与多重窗体程序设计有关的语句和方法 (3)Show语句语句 格式格式: 窗体名称窗体名称.show(模式模式,OwnerForm) 功能:功能:用来显示一个窗体,兼有载入和显示窗体两种功能用来显示一个窗体,兼有载入和显示窗体两种功能 如:如:Form1.Show 0, Form2 3、与多重窗体程序设计有关的语句和方法、与多重窗体程序设计有关

36、的语句和方法 (4)hide方法方法 格式格式: 窗体名窗体名.hide 功能:用来隐藏窗体,兼有载入和隐藏窗体两种功能。功能:用来隐藏窗体,兼有载入和隐藏窗体两种功能。 【例例7-18】多窗体的应用。输入学生多窗体的应用。输入学生5门课程的成绩,计算门课程的成绩,计算 总分、平均分并显示。总分、平均分并显示。 本例有本例有3个窗体个窗体Form1、Form2、Form3,分别作为应用程,分别作为应用程 序的主窗体、输入窗体、显示窗体,还有一个标准模块,对序的主窗体、输入窗体、显示窗体,还有一个标准模块,对 窗体间共用的全局变量进行说明。窗体间共用的全局变量进行说明。 标准模块的代码标准模块的

37、代码: Option Explicit Public yw%, sx%, yy%, hx%, jsj% Public zf As Single, pj As Single 声明声明7个全局变量个全局变量,供应供应 用程序的各个模块共用用程序的各个模块共用 语文,数学,英语,化学,计算机语文,数学,英语,化学,计算机 Form1窗体如图窗体如图7-16所示,是主窗体,运行后见到的第一所示,是主窗体,运行后见到的第一 个窗体。单击个窗体。单击“输入成绩输入成绩”按钮显示按钮显示Form2,单击单击“计算成绩计算成绩” 按钮显示按钮显示Form3,单击单击“重新计算重新计算”按钮按钮,显示显示For

38、m1窗体窗体,单单 击击“退出退出”按钮,退出应用程序。按钮,退出应用程序。 7.5.2 多重窗体多重窗体 通过通过“工程资源管理器工程资源管理器”双击切换至双击切换至form1,双击输入双击输入form1窗体代码窗体代码: Private Sub Command1_Click() 输入成绩按钮输入成绩按钮 Form2.Show Command2.Enabled = True End Sub Private Sub Command2_Click() 计算成绩按钮计算成绩按钮 Form3.Show Command4.Enabled = True End Sub Private Sub Comma

39、nd3_Click() 退出按钮退出按钮 End End Sub Private Sub Command4_Click() 重新计算按钮重新计算按钮 Load Form1 Unload Form2 Unload Form3 Command2.Enabled = False Command4.Enabled = False End Sub 7.5.2 多重窗体多重窗体 通过通过“工程资源管理器工程资源管理器”双击切换至双击切换至form2,双击输入双击输入form2窗体代码窗体代码: Private Sub Text5_LostFocus() yw = Val(Text1.Text) sx =

40、Val(Text2.Text) yy = Val(Text3.Text) hx = Val(Text4.Text) jsj = Val(Text5.Text) End Sub Private Sub Form_Activate() Text1.Text = Str(yw + sx + yy + hx + jsj) Text2.Text = Str(yw + sx + yy + hx + jsj) / 5) End Sub 通过通过“工程资源管理器工程资源管理器”双击切换至双击切换至form3,双击输入双击输入form3窗体代码窗体代码: 7.5.3 Sub main过程过程 Sub main过

41、程过程是是标准模块标准模块module1.bas等等中的中的一个一个 特殊过程特殊过程,主要包含主要包含一些一些应用程序启动时首先执行的应用程序启动时首先执行的 代码代码,如如一些一些数据的初始化数据的初始化或根据情况或根据情况加载不同窗体加载不同窗体 代码代码等。在等。在“工程属性工程属性”对话框对话框中的中的“启动对象启动对象”中设置中设置 sub main过程过程为为启动过程启动过程。 Sub main过程过程又称为又称为“ 启动过程启动过程”。 Sub main过程过程只能定义在只能定义在标准模块标准模块bas中,中,且同一且同一 程序程序(工程或工程组工程或工程组)中中只能定义一次该

42、过程只能定义一次该过程,如如果果有有 多个标准模块多个标准模块,则只能在其中之一模块中定义一次则只能在其中之一模块中定义一次 Sub main过程过程。 概念概念 注意事项注意事项 7.5.3 Sub Main过程过程 1. 默认默认情况下情况下,应用程序的第一个窗体应用程序的第一个窗体为为启动启动 窗体窗体,如果如果想在应用程序启动时首先显示其他想在应用程序启动时首先显示其他 窗体窗体,那么就得在那么就得在“工程属性工程属性”对话框对话框中改变启中改变启 动窗体的名称。动窗体的名称。 2. 如果如果希望希望应用程序启动时首先执行一些代应用程序启动时首先执行一些代 码码,则则可以将这些代码写在

43、可以将这些代码写在标准模块标准模块的的一个一个名名 称称为为Main的的Sub过程过程中中,然后然后将将Main过程过程定定 义为义为启动程序启动程序。 3. 设置设置Main过程过程为为“启动程序启动程序”的方法的方法 “工程工程工程工程1属性属性”在在“工程属性工程属性”对话框对话框的的 “启动对象启动对象”下拉列表下拉列表框中框中选择选择“Sub Main”。 相关说明相关说明 77 变量的作用域变量的作用域: 指变量的指变量的有效范围有效范围。 变量的生存期变量的生存期: 指变量的指变量的作用时间作用时间。 78 7.6.1 变量的作用域变量的作用域 可以将变量分为可以将变量分为局部局

44、部变量、变量、模块模块级变量和级变量和全局全局 变量。变量。 模块级变量模块级变量 全局变量全局变量 局局 部部 变变 量量 模块模块 过程过程 1. 局部变量 声明 不声明 Dim A As Integer A每次执行过程时被初始化 Static C As Single C在程序执行期间保持不变 作用范围 仅在声明的过程中起作用 其他过程中即使有同名变量,也不是指同 一变量。 79 【例7-19】 有如下程序,单击三次 Command1按钮的结果是什么? Sub p(a As Integer) x,y 为过程中的局部变量,只在本过程有 效,且每次运行该过程都会被初始化 Dim x, y x

45、= x + 1 y = y + 2 a = a + x + y a为引用传 递的形参,是双向传递的 End Sub 80 Private Sub Command1_Click() Dim a As Integer a为过程中 的局部变量,每次运行都会被初始化 a = 1 Call p(a) 将赋值 为1的实参传给形参 Print a; 在过程 改变a的值要回传给实参,所以为4 Call p(a) 将赋值为4 的实参传给形参 Print a 81 程序运行的结果是: 4 7 4 7 4 7 82 2. 模块级变量 声明 在模块的通用声明段中用以下关键字声明 的变量。 Private 在模块运行时被 初始化 Dim 在模块运行时 被初始化 作用范围 在该模块的所有过程中都起作用,不会每次 运行被初始化。 其他模块不能访问这些变量 83 【例7-20】 将例7-19的程序作如下改动, 则单击单击三次Command1按钮的结果是什么? Option Explicit Dim x, y, a% x,y,a在窗体模块的通 用声明段用Dim语句定义,为模块级的变量 Sub p(a As Integer) x = x + 1 y = y + 2 a = a +

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论