VB第九章(6)

2020-05-05 16:31

Private Sub Form_Click() Form2.Hide Form3.Show End Sub

Private Sub Form_Click() Form3.Hide Form4.Show End Sub

Private Sub Form Click() Form4.Hide Forml.Show End Sub

上述程序运行后,首先显示Forml,单击该窗体后,Form l消失,显示Form2,单击Form2 窗体后,Form2消失,显示Form3\所显示的每个窗体的大小和位置均相同。 9.5.2控件参数

和窗体参数一样,控件也可以作为通用过程的参数,即在一个通用过程中设置相同性质 控件所需要的属性,然后用不同的控件调用此过程。

例9.10编写一个通用过程,在过程中设置字体属性,并调用该过程显示指定的信息。 通用过程如下:

Sub Fontout(TestCtrl1 As Control, TestCtrl2 As Control) TestCtrl1.FontSize=18

TestCtrl1.FontName=”幼圆” TestCtrl1.FontItalic=True TestCtrl1.FontBold“True TestCtrl1.FontUnderline=True TestCtrl2.FontSize=24

TestCtrl2.FontName=\ TestCtrl2.FontItalic=False TestCtrl2.FontUnderline=False End Sub

上述过程有两个参数,其类型均为Control.该过程用来设置控件上所显示的文字的各种属 性。为了调用该过程,在窗体上建立两个文本框,然后编写如下的事件过程: Private Sub Form_Load() Textl.Text=’.欢迎使用”

Text2.Text=\ End Sub

Private Sub Form_C1ick() Fontout Textl,Text2 End Sub

运行上面的程序,单击窗体,执行结果如图9.10所示。

控件参数的使用比窗体参数要复杂一些,因为不同的控件所具有的属性也不一样。在用 指定的控件调用通用过程时,如果通用过程中的属性不属于这种控件,则会发生错误。对于 上面例子中的通用过程Fontout,如果用文本框控件作为实参调用,则可顺利通过,但如果 用图片框调用,即:

Private Sub Picture lClick() Fontout Picture I End Sub

则会出现错误,因为图片框没有文本(Text)属性。

这就是说,在用控件作为参数时,必须考虑到作为实参的控件是否具有通用过程中所列 的控件的属性。为此,Visual Basic提供了一个TypeOf语句,其格式为: [If}E1seIfJ TypeOf控件名称Is控件类型 TypeOf语句放在通用过程中,“控件名称”实际上指的是控件参数(形参)的名字,即\Control”前面的参数名。“控件类型”是代表各种不同控件的关键字,这些关键字是: CheckBox(复选框)Frame(框架)

ComboBox(组合框)HScrollBar(水平滚动条) CommandButton(命令按钮)Label(标签)

ListBox(列表框)DirListBox(目录列表框) DriveListBox(驱动器列表框)Menu(菜单)

FileListBox(文件列表框)OptionButton(单选按钮) PictureBox(图片框)TextBox(文本框) Timer(计时器)VScrollBar(垂直滚动条)

在通用过程中,TypeOf语句用来限定控件参数的类型。加上TypeOf测试后,前面的例 子改为:

Sub FOntout(TestCtrlI As Control, TestCtrl2 As Control) TestCtrl l .FontSize=18 TestCtrl l .FontName=\ TestCtrll.FontItalic=True TestCtrl l .FontBold=True

TestCtrl l .FontUnderline=True If TypeOf TeStCtrI l Is TextBox Then

TestCtrl l .Text=\ End If

TestCtrl2.FontSize=24

TestCtrl2.FontName=\ TestCtrl2.FontItalic=False TestCtrl2.FontUnderline=False If TypeOf TestCtr12 Is TextBox Then

TestCtrl2.Text=\ End If End Sub

上述过程加上了TypeOf测试,只有用文本框(TextBox)作为实参调用该过程时,才会把字符 串\赋给Text属性。如果用没有Text属性的控件作为实参调用该过程,也不会产生错误。

在窗体上建立一个文本框和一个命令按钮,然后编写如下事件过程: Private Sub Form Click() Fontout Textl,Commandl End Sub

上述过程中的第一个参数用文本框(TextBox)作为实参,可以顺利调用通用过程Fontout o

第二个参数用命令按钮(CommandButton)作为实参调用,它没有Text属性,类型不符。但由于Fontout过程内己有TypeOf测试,因而不会出错。程序的执行结果如图9.11所示。 例9.11在窗体上建立两个命令按钮,单击某个命令按钮后,该按钮移到窗体上的某 个随机位置。

首先在窗体上画两个标签和两个命令按钮,各控件及窗体的属性设置如表9.1: 表9.1程序中使用的控件

对象名称(Name)标题(Caption) 窗体Forml’.控件移动演示” 标签1 Label l”单击某个控件”

标签2 Labe12”可使该控件移动到窗体的某随机位置” 命令按钮1 Commandl’.移动该命令按钮., 命令按钮2 Command2”移动该命令按钮” 设计完之后的窗体如图9.12所示。 编写如下两个通用过程:

Function RandInt (Inmin As Integer, InMax As Integer) RandInt=Int(InMax一Inmin+1)*Rnd+Inmin End Function

Sub Jump (ctl As Control)

Dim Horiz As Integer, vert As Integer Horiz=RandInt(0,Width一ctl. Width) vert=RandInt(0, Height一ctl.Height) ctl.Move Horiz, vert End Sub

过程RandInt用来产生整型随机数,在过程Jump中调用该过程,随机确定控件的位置。过 程Jump有一个形参,该参数的类型为控件。在这个过程中,调用RandInt过程产生水平和 垂直方向的位置,然后用Move方法移到这个位置。 编写如下的事件过程:

Private Sub Form_Load()

Label l .FontName=”宋体” Label l .FontBold=True Label l .FontSize=16 Label2.FontName=”魏碑,, Label2.FontBold=True Label2.FontSize=14 Commandl.FontSize=12 Command2.FontSize=12 End Sub

在下面的事件过程中调用过程Jump: Private Sub Commandl一lick() Jump Command I End Sub

Private Sub Command2 Click() Jump Command2 End Sub

程序运行后,单击某个命令按钮,该命令按钮即跳到窗体的某个随机位置,如果单击图像框, 则结束程序运行。程序的执行情况如图9.13所示。 9.6局部内存分配

在运行应用程序时,Visual Basic知道程序中有多少全局变量,并为它们分配内存。但是,Visual Basic不知道有多少局部变量,甚至不知道是否会调用程序中的某个过程。只有在调用一个过程时才建立该过程所包含的局部变量和参数,并为其分配内存,而在过程结束后清除这些局部变量。如果再次调用该过程,则重新建立这些变量。也就是说,局部变量的内存在需要时分配,释放后可以被其他过程的变量使用。

有时候,在过程结束时,可能不希望失去保存在局部变量中的值。如果把变量声明为全 局变量或模块级变量,则可解决这个问题。但如果声明的变量只在一个过程中使用,则这种 方法并不好。为此,Visual Basic提供了一个Static语句,其格式如下: Static变量表

其中“变量表”的格式如下: 变量[()][As类型][,变量[()[As类型]]??

可以看出,Static语句的格式与Dim语句完全一样,但Static语句只能出现在事件过程、Sub过程或Function过程中。在过程中的Static变量只有局部的作用域,即只在本过程中可见,但可以和模块级变量一样,即使过程结束后,其值仍能保留。 在程序设计中,Static语句常用于以下两种情况:

(1)记录一个事件被触发的次数,即程序运行时事件发生的次数。例如: Sub Command1_Click()

Static counter As Integer counter=counter+l

MsgBox \ End Sub

该事件过程用来记录命令按钮被按(单击)了多少次,在过程中用Static语句定义计数器 counter,执行完过程后,该变量的值仍能保留,从而可以记录下单击命令按钮的次数。如 果用Dim代替过程中的Static,则程序不能正常运行,有兴趣的读者不妨一试。 (2)用于开关切换,即原来为开,将其改为关,反之亦然。例如: Sub Commandl Click() Static Toggle

Toggle=Not Toggle If Toggle= 0 Then

textl.FontBold=True Else

textl.FontBold=False End If End Sub

该过程用来切换文本框中的字体。假定文本框中的文本为普通字体,则单击一次命令按钮将 变为粗体;如果再单击一次命令按钮,则又变为普通字体;再单击一次又变为粗体??如此 反复,每次单击命令按钮切换其字体特性。 Static语句还有以下几种用法:

(1)把一个数值变量定义为静态变量。例如: Static abc As Integer

(2)把一个字符串变量定义为静态变量。例如:

Static strvar As string

(3)使一个通用过程中的所有变量成为静态变量。例如: Static Sub MyRoutine()

(4)使一个事件过程中的所有变量成为静态变量。例如: Static Sub Form Click() (5)定义静态数组。例如: Static emplo name(25) 说明:

(1)用Static语句定义的变量可以和在模块级定义的变量或全局变量重名,但用Static 语句定义的变量优先于模块级或全局变量,因此不会发生冲突。

(2)前面己经看到,Static可以作为属性出现在过程定义行中。在这种情况下,该过程 内的局部变量都默认为Static.对于Static变量来说,调用过程后其值被保存下来。如果省 略Static,则过程中的变量默认为自动变量。在这种情况下,每次调用过程时,自动变量都 被初始化为0。

(3)当数组作为局部变量放在Static语句中时,在使用之前应标出其维数。例如: Sub SubproQ

Static Arr() As Integer Dim Arr(-5 To 5) As Integer End Sub

(4)用下面的程序试验Static变量的作用: Sub Form Click() Print”x\,”y11 Print

For i%=1 To 5 testsub Next i% End Sub

Sub testsub() Static y x=x+1 y=y+1 Print x, y End Sub

在上面的程序中,x和y都是过程testsub中的局部变量。其中x是一个自动变量,每次调 用testsub时都被重新初始化为。;而y是Static变量,可以保持上次调用的值。这样,每次

调用过程testsub时,x的值不会发生变化,而y的值每次都要改变。程序运行结果如下: x y 1 1 1 2 1 3 1 4 1 5 9.7 Shell函数


VB第九章(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:宿管部管理制度

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: