程序设计基础-Visual Basic(2019秋)

沈阳师范大学 刘立群

目录

  • 认识 Visual Basic
    • ● 认识 Visual Basic
    • ● 对象的属性、事件和方法
    • ● 控件的容器-窗体
    • ● 文本编辑工具-文本框
    • ● 命令按钮和标签
  • 程序设计基础
    • ● 语句和语法规则
    • ● 数据类型和常量变量
    • ● 运算符与表达式
    • ● 常用内部函数
    • ● 输入与输出
  • 基本控制结构和算法
    • ● 程序结构与算法
    • ● 选择结构的语句实现
    • ● 循环结构的语句实现
    • ● 穷举和递推问题求解
    • ● 嵌套循环解百钱百鸡问题
    • ● 星形矩阵的显示问题
  • 常用标准控件
    • ● 选择控件和滚动条--设置文字格式
    • ● 列表框及组合框—购票系统
    • ● 计时器与图片控件—自动变换的交通灯
    • ● 图形操作—小球运动
  • 数组和过程
    • ● 数组的定义与一维数组的应用
    • ● 二维数组
    • ● 控件数组
    • ● 自定义过程
    • ● 参数传递
    • ● 变量的作用域
  • 键盘鼠标事件与菜单设计
    • ● 鼠标键盘事件--小鸡吃虫游戏
    • ● 菜单程序设计--控制移动字幕
  • 通用对话框与文件操作
    • ● 通用对话框与文件操作
    • ● 文件操作--打开保存数据实例
自定义过程

 

所谓过程就是一段命名的程序代码,通过名字可以反复调用,从而增加程序的可读性和可维护性。从前面的例子我们已经看到,Visual Basic的程序运行都是由事件驱动来实现的,而事件驱动就是通过事件执行对应的事件过程。

Visual Basic除了事件过程外,还允许用户定义过程,称为通用过程。因此,本质上Visual Basic的程序就是各种过程的集合。本节将介绍Visual Basic的通用过程(包括Function过程和Sub过程)和事件过程的定义、调用及其相关的问题。

Visual Basic中使用下列几种过程:

Sub过程(子程序)。

Function过程(函数过程)。

事件过程。

格式:

[Private|Public|Static] Sub<过程名>[(形式参数表)]

 过程语句

 [Exit Sub]

End Sub

说明:

[Private|Public|Static]可以定义Sub过程的作用范围。

“过程名”是定义的Sub过程的名称,长度不超过255个字符。

“形式参数表”列出调用Sub过程时传送的变量,多个参数之间用逗号隔开。格式为:

[ByVal |ByRef]变量名[As数据类型]

其中,ByValByRef用于指定参数传递的方式,其区别将8.3.1节介绍。“As数据类型”用于指定参数的数据类型,缺省类型为变体类型。

End Sub表明代码块的结束。每个Sub过程必须有一个End Sub语句。当程序执行到该语句时,退出过程,并立即返回到上一级调用该过程的语句处,继续执行下面的语句。

Exit Sub语句用于强制退出过程。

例如:编写一个两个数交换的过程。

Private Sub Swap(x%, y%)

 Dim temp

 temp = x

 x = y

 y = temp

End Sub

此例中Swap为过程名x%, y%为形式参数。过程的作用是交换变量xy的值。

调用Sub过程有两种方法:

方法一:使用CaII命令

格式:

Call <过程名> [(实际参数表)]

方法二:直接使用过程名调用

格式:

<过程名> [实际参数表]

说明:

调用Sub过程时的参数称为实际参数,实际参数要与形式参数一一对应,即参数个数相同,数据类型一致。实际参数可以是变量也可以是具体的值。当实参为数组时,实参名后也要加一对括号。

当使用Call语句时,参数必须在括号内,若省略Call关键字,则必须省略参数两边的括号,例如下列程序用来调用子程序并显示调用前后变量的不同结果。

Private Sub Form_Click()

      Dim a%, b%

      a = 10

      b = 20

      Print "过程调用前a="; a; "b = "; b

      Call Swap(a, b)                  '或用Swap a, b表示调用过程

      Print "过程调用后a="; a; "b = "; b

End Sub

调用语句常出现在主程序中,被调用的程序称为为子程序。上述程序运行过程如下:

程序执行步骤:

先执行主程序中的命令语句。

在主程序中遇到语句Call Swap(a, b),则调用子程序Swap,且主程序变量a, b的值传递给子程序中的变量x, y

执行子程序中的语句。

子程序执行结束,返回主程序,且子程序变量x, y的值传递给主程序中的变量a, b

继续执行主程序中Call Swap(a, b)命令以后的语句。

格式:

[Private|Public|Static] Function <函数名>([形式参数表])[As数据类型] 

函数语句

[Exit Function]

End Function

说明:

函数的定义与Sub过程类似。Exit Function可以强制退出函数过程。

函数过程有返回值,这个返回值依靠函数名传递。因此,函数名不仅可以标记函数,而且还用来传递函数的返回值。函数定义时需要有一个为函数名赋值的语句。

例如定义一个数学函数            

Private Function f(x as integer) as integer

 f = 3 * x ^ 3 - 2 * x ^ 2 + 6 * x - 1

End Function

函数定义中,语句“f = 3 * x ^ 3 - 2 * x ^ 2 + 6 * x - 1”表示将求得表达式的结果赋值给函数名f,即调用函数时就可以将这个结果返回到调用语句。

格式:

<函数名> ([实际参数表])

说明:函数的调用格式同Visual Basic中内部函数的使用类似,例如f(x)为已经定义的求的函数,则下列语句均为正确的调用形式:

af(10)            'x10的表达式3 * 103- 2 * 102+ 6 * 10 – 1的值

bf(10)+f(20)       'x分别为1020的表达式的和

调用无参数函数时,括号不能省略。

Function函数过程调用的程序运行流程与Sub过程相同,先执行主程序中的语句;遇到函数调用语句则执行自定义函数过程,自定义函数过程执行结束后返回主程序并带回函数值;最后执行主程序余下的语句。

当调用Sub过程时,调用语句中的实际参数就与定义过程语句中的形式参数在个数位置上一一对应起来,并以某种方式传递数据,这个过程称为参数传递。在未出现过程调用时,形参并不占存储单元,只有在发生过程调用时,形参才被分配存储单元。在调用结束后,形参所占的存储单元被释放。上述程序中定义的函数及其参数传递情况如下:

函数定义语句:

Private Function f (x As Integer) As Integer           

End Sub

函数调用语句:af(10)即实参10对应形参x,且数据类型相同。