四、自定义方法及其使用范围

自定义方法及其使用范围

虽然VB6中给我们提供了不少的子程序和函数,但在实际开发中,可能还是不能满足我们的需要,于是就要我们自己创建一些来使用了,在VB6中,我们可以很容易的创建出自己的子程序和函数,现在就让我们开始吧。

1 自定义函数

VB6中,使用Function关键字来创建函数,现在我们打开窗体Form1的代码窗口,然后在左边列表中选择“通用”,这时输入代码的光标就会在所有其它代码块的外边,我们就在这里开始编写如下代码:

Function IsLeapYear(iYear As Long) As Boolean

    IsLeapYear = ((iYear Mod 100 <> 0 And iYear Mod 4 = 0) Or (iYear Mod 100 = 0 And iYear Mod 400 = 0))

End Function

在这三行代码中,我们使用Function来标明要创建的是一个函数,而End Function则指明了函数结束的位置,在这之间的则是函数体代码。

跟在Function关键字后面的IsLeapYear则是我们所定义的函数的函数名,也就是在调用时要用到的名称。在函数名后的括号中,则是函数的参数部分,这一部分在有些函数中可能没有,但这时括号是不能省略的。

关于函数的参数,和在程序中定义变量是很相似的,即“参数名 As 类型”,如果有多个参数,则使用英文半房的逗号“,”分隔。

在括号的后面,As关键字后则是函数的返回值类型,在这里我们返回的则是一个布尔型。

关于这个函数,它的作用也许大家从名称中就可以看出来了,没错,它就是用来判断参数iYear所带入的年份是不是一个闰年,也就是二月有29天,大家可以在一个按钮的响应代码中添加下面这句代码来试试它的效果:

MsgBox (IsLeapYear(1904))

然后,你可以更改1904为任意数字,然后看看判断的结果。当一个年份是闰年是则显示True,如果不是则显示False。

 

我们看到在函数体内只有一行代码,这可以完成最基本的操作,在这行代码中,我们使用了Mod运算符,它的运算结果将会是一个整数,是两数相除后的余数,如果能被除尽,则返回0。在代码中,如果一个年份不能被100整除,则能被4整除就是一个闰年;如果年份能被100整除,则只是在同时能被400整除时才是一个闰年。

在本行代码中,还使用了And和Or运算符,它们被称为逻辑运算符,下面分别说明一下:

And运算符,被称为“与”运算符,只有在两个运算量都是True或非0的数时,运算结果才是True,否则运算结果就是False。

Or运算符,又称为“或”运算符,当运算的两个量有一个是True或非0时,运算结果是True;其中两个运算量都是False或都为0时,结果才是False。

 

在这里,我们还可以看到这一行代码中使用了大量的运算符,有时它们连在一起形成很长的代码,那它们又是如何来判断执行的顺序呢?其实,在每一种编程语言中都有有运算符的优先级原则,也就是不同运算符在一起时先执行谁的操作,后执行谁的操作。但实际应用中,想记清楚几十个运算的优先级可能不是一个太容易的事情,所以我选择了不去记它。在这里,如果不能对运算符的优级有十足的把握,我们还可以使用小括号强行更改代码的运算顺序,在代码中我们可以看到使用了三对小括号,如果对两个内层小括号中的代码还不是太清楚的话,我们还可以加几对小括号来强行控制,代码可以改成:

Function IsLeapYear(iYear As Long) As Boolean

    IsLeapYear = (((iYear Mod 100 <> 0) And (iYear Mod 4 = 0)) Or ((iYear Mod 100 = 0) And (iYear Mod 400 = 0)))

End Function

 

到这里,如果你对它们的运算方法还不是很熟悉的话,可以暂时放一放,这样长的代码可以在实践中逐渐掌握。

 

关于函数的定义,我们就先介绍到这里,在前面的学习中,我们已经知道子程序和函数最大的区别就是没有返回值,下面我们看看它是怎么定义的。

 

2 自定义子程序

子程序的定义,我们使用Sub关键字,看一看下面这个子程序,它的功能是清除窗体Form1上所有文本框的内容:

Sub ClearText()

    Dim ctr As Control

    For Each ctr In Form1.Controls

        If TypeOf ctr Is TextBox Then ctr.Text = ""

    Next

End Sub

其中,Sub关键字后跟着的就是子程序的名称ClearText;我们可以看到,这个子程序并没参数,和函数一样,当没有参数时一对小括号也是不能省略的。也和函数相似,子程序是以End Sub来结束的。

  再来看一下方法体内的代码吧,在这里我们定义了一变量ctr,它的类型是Control,然后我们使用For EachIn循环语句(为什么是这个语句而不是ForTo语句呢,当我们学习完面向对象后也许你就能明白了,在编码中大家可以参照编写)遍历窗体Form1中所有的控件,当这个控件的类型是文本框时,则将它的Text属性设置为空串,从而达到了清除所有文本框内容的目的;要注意的是,在这里TypeOf和Is是关键字。

再来看看这个If语句,好象没有End If来结束,这是因为在条件成立时只有一条执行语句,这时我们就可将这一行执行语句写在Then关键字的后面,从而省略和End If语句。

 

3 方法的使用范围

在上面我们所定义的两个方法IsLeapYear和ClearText,它们只能在Form1内部使用,ClearText到也没什么,然而IsLeapYear有可能在很多处理日期的地方要用到,我们总不能每次都要编写一次吧?

当然不用,只要在IsLeapYear定义的Function关键字前加上一个Public关键字就可以了,如:

Public Function IsLeapYear(iYear As Long) As Boolean

其它代码则不用改变,然后,我们程序的其它地方就可以使用“Form1.IsLeapYear(2005)”这样的形式来调用了,而这里如果将Public关键字改成“Private”则又只能在Form内使用了,这两个关键字就决定了方法的使用范围,我们会以后面学习中很多的接触到它们的用法。

对于在程序中要公用的方法,如系统中提供的MsgBox函数、CStr函数,我们在窗体中定义它们当然是不太方便的,在后面我们还会学习到另外的大规模创建公用代码的方法。

 

关于方法的定义,在这里要说明的是,函数或子程序只能单独存在,而不能互相嵌套,也就是说在子程序或函数的代码块中不能定义其它的子程序和函数。

 

在前面我们使用了Dim变量来定义变量,如果要定义一个在整个程序中都要使用的变量,也可以在窗体的“通用”部分定义它,并且将Dim关键字改成Public关键字;这些变量只能定义在所有窗体方法的前面,这一点应该注意。

对于变量,Dim、Private和Public三种定义方式的不同在于:Dim只能在方法体内定义变量;Private定义的变量则只能在所定义的文件内使用,如窗体文件;而Public所定义的则是全局的变量,它可以使用在整个程序中使用。

在编程中,请大家注意变量和方法的使用范围。

 

在下一章,我们将会来了解一下VB6中的错误处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值