VB中类模块使用简单示例

Eddy 发布于2010-12-12 23:21:41 分类: 程序设计 已浏览loading 网友评论1条 我要评论

[color=#008000]'*************************************************************************[/color]
[color=#008000]'**代码名称:VB类模块演示[/color]
[color=#008000]'**描 述:VB类模块使用示例[cStack.cls文件][/color]
[color=#008000]'**说 明:www.rrgod.com[/color]
[color=#008000]'**创 建 人:Eddy[/color]
[color=#008000]'**日 期:2010-12-12[/color]
[color=#008000]'*************************************************************************[/color]

[color=#0000D0]Option[/color] [color=#0000D0]Explicit[/color]

[color=#0000D0]Private[/color] x(10) [color=#0000D0]As[/color] Variant [color=#008000]'存放堆栈数据[/color]
[color=#0000D0]Private[/color] tos [color=#0000D0]As[/color] [color=#0000D0]Long[/color] [color=#008000]'栈顶指针[/color]
[color=#0000D0]Public[/color] Top [color=#0000D0]As[/color] Variant [color=#008000]'存放栈顶值[/color]
[color=#0000D0]Event[/color] [color=#0000D0]error[/color]([color=#0000D0]ByVal[/color] ErrNum [color=#0000D0]As[/color] [color=#0000D0]Long[/color], [color=#0000D0]ByVal[/color] ErrMsg [color=#0000D0]As[/color] [color=#0000D0]String[/color]) [color=#008000]'堆栈溢出时被触发[/color]

[color=#0000D0]Private[/color] [color=#0000D0]Sub[/color] Class_Initialize() [color=#008000]'初始化[/color]
tos = -1
Top = vbNull
[color=#0000D0]End[/color] [color=#0000D0]Sub[/color]

[color=#0000D0]Public[/color] [color=#0000D0]Sub[/color] Push([color=#0000D0]Optional[/color] a [color=#0000D0]As[/color] Variant) [color=#008000]'给堆栈增加一个值[/color]
[color=#0000D0]If[/color] tos + 1 >= [color=#FF0000]UBound[/color](x) [color=#0000D0]Then[/color]
[color=#0000D0]RaiseEvent[/color] [color=#0000D0]error[/color](1, [color=#808080]"Stack overflow."[/color])
[color=#0000D0]ElseIf[/color] [color=#FF0000]IsMissing[/color](a) [color=#0000D0]Then[/color] [color=#008000]'使用 IsMissing 函数来检测在调用一个程序时是否提供了可选 Variant 参数[/color]
tos = tos + 1
x(tos) = Top
[color=#0000D0]Else[/color]
tos = tos + 1
x(tos) = a
Top = a
[color=#0000D0]End[/color] [color=#0000D0]If[/color]
[color=#0000D0]End[/color] [color=#0000D0]Sub[/color]

[color=#0000D0]Public[/color] [color=#0000D0]Function[/color] Pop() [color=#0000D0]As[/color] Variant [color=#008000]'从堆栈中取出一个值[/color]
[color=#0000D0]If[/color] tos = -1 [color=#0000D0]Then[/color]
[color=#0000D0]RaiseEvent[/color] [color=#0000D0]error[/color](2, [color=#808080]"Stack underflow."[/color])
[color=#0000D0]ElseIf[/color] tos = 0 [color=#0000D0]Then[/color]
Pop = x(tos)
Top = vbNull
[color=#0000D0]Else[/color]
Pop = x(tos)
tos = tos - 1
Top = x(tos)
[color=#0000D0]End[/color] [color=#0000D0]If[/color]
[color=#0000D0]End[/color] [color=#0000D0]Function[/color]

[color=#008000]'ParamArray只用于 arglist 的最后一个参数,指明最后这个参数是一个 Variant 元素的 Optional 数组。[/color]
[color=#008000]'使用 ParamArray 关键字可以提供任意数目的参数。[/color]
[color=#008000]'ParamArray 关键字不能与 ByVal,ByRef,或 Optional 一起使用。[/color]
[color=#0000D0]Public[/color] [color=#0000D0]Sub[/color] PushEx(ParamArray a() [color=#0000D0]As[/color] Variant) [color=#008000]'一次压入多个值[/color]
[color=#0000D0]Dim[/color] z [color=#0000D0]As[/color] Variant
[color=#0000D0]For[/color] [color=#0000D0]Each[/color] z In a
[color=#0000D0]If[/color] tos + 1 >= [color=#FF0000]UBound[/color](x) [color=#0000D0]Then[/color]
[color=#0000D0]RaiseEvent[/color] [color=#0000D0]error[/color](1, [color=#808080]"Stack overflow."[/color])
[color=#0000D0]Exit[/color] [color=#0000D0]Sub[/color]
[color=#0000D0]Else[/color]
tos = tos + 1
x(tos) = z
[color=#0000D0]End[/color] [color=#0000D0]If[/color]
[color=#0000D0]Next[/color] z
Top = x(tos)
[color=#0000D0]End[/color] [color=#0000D0]Sub[/color]

[color=#0000D0]Public[/color] [color=#0000D0]Sub[/color] Clear() [color=#008000]'初始化堆栈[/color]
tos = -1
[color=#0000D0]End[/color] [color=#0000D0]Sub[/color]

[color=#0000D0]Public[/color] [color=#0000D0]Property[/color] [color=#0000D0]Get[/color] Count() [color=#0000D0]As[/color] Variant [color=#008000]'在堆栈中返回顶[/color]
Count = tos
[color=#0000D0]End[/color] [color=#0000D0]Property[/color]

[color=#0000D0]Public[/color] [color=#0000D0]Property[/color] [color=#0000D0]Let[/color] Count([color=#0000D0]ByVal[/color] vNewValue [color=#0000D0]As[/color] Variant)
tos = vNewValue
[color=#0000D0]End[/color] [color=#0000D0]Property[/color]

[color=#008000]'*************************************************************************[/color]
[color=#008000]'**代码名称:VB类模块演示[/color]
[color=#008000]'**描 述:VB类模块使用示例[/color]
[color=#008000]'**说 明:www.rrgod.com[/color]
[color=#008000]'**创 建 人:Eddy[/color]
[color=#008000]'**日 期:2010-12-12[/color]
[color=#008000]'*************************************************************************[/color]

[color=#0000D0]Option[/color] [color=#0000D0]Explicit[/color]
[color=#0000D0]Private[/color] WithEvents s [color=#0000D0]As[/color] cStack
[color=#0000D0]Private[/color] [color=#0000D0]Sub[/color] Command1_Click()
s.Push Text1.Text
[color=#0000D0]End[/color] [color=#0000D0]Sub[/color]

[color=#0000D0]Private[/color] [color=#0000D0]Sub[/color] Command2_Click()
Text1.Text = s.Pop
[color=#0000D0]End[/color] [color=#0000D0]Sub[/color]

[color=#0000D0]Private[/color] [color=#0000D0]Sub[/color] Command3_Click()
Text1.Text = s.Top
[color=#0000D0]End[/color] [color=#0000D0]Sub[/color]

[color=#0000D0]Private[/color] [color=#0000D0]Sub[/color] Command4_Click()
s.Clear
[color=#0000D0]End[/color] [color=#0000D0]Sub[/color]

[color=#0000D0]Private[/color] [color=#0000D0]Sub[/color] Command5_Click()
Text1.Text = s.Count
[color=#0000D0]End[/color] [color=#0000D0]Sub[/color]

[color=#0000D0]Private[/color] [color=#0000D0]Sub[/color] Command6_Click()
s.PushEx [color=#808080]"rrgod"[/color], [color=#808080]"eddy"[/color], [color=#808080]"blog"[/color]
[color=#0000D0]End[/color] [color=#0000D0]Sub[/color]

[color=#0000D0]Private[/color] [color=#0000D0]Sub[/color] Form_Load()
[color=#0000D0]Set[/color] s = [color=#0000D0]New[/color] cStack
[color=#0000D0]End[/color] [color=#0000D0]Sub[/color]

[color=#0000D0]Private[/color] [color=#0000D0]Sub[/color] Form_Unload(Cancel [color=#0000D0]As[/color] [color=#0000D0]Integer[/color])
[color=#0000D0]Set[/color] s = [color=#0000D0]Nothing[/color]
[color=#0000D0]End[/color] [color=#0000D0]Sub[/color]

[color=#0000D0]Private[/color] [color=#0000D0]Sub[/color] s_error([color=#0000D0]ByVal[/color] ErrNum [color=#0000D0]As[/color] [color=#0000D0]Long[/color], [color=#0000D0]ByVal[/color] ErrMsg [color=#0000D0]As[/color] [color=#0000D0]String[/color])
[color=#FF0000]MsgBox[/color] ErrNum & [color=#808080]": "[/color] & ErrMsg
[color=#0000D0]End[/color] [color=#0000D0]Sub[/color]

[color=#0000D0]Private[/color] [color=#0000D0]Sub[/color] Timer1_Timer()
Label1.Caption = [color=#808080]"当前栈顶值为:"[/color] & s.Top
[color=#0000D0]End[/color] [color=#0000D0]Sub[/color]

已经有(1)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/program/678.html     欢迎订阅Eddy Blog

  1. 发表于2010-12-13 13:19:06

    哈哈~~类模块是个非常好玩的东东

    Haha

    Eddy 于 2010-12-13 14:20:01 回复
    没事玩玩COM方面的编程……

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言