读书人

关于raiseevent的运用

发布时间: 2013-01-17 10:28:54 作者: rapoo

关于raiseevent的使用
本帖最后由 bcrun 于 2012-12-01 12:33:01 编辑 第一次发帖……

我最近要用到raiseevent来触发其他事件。但是触发后事件的内容没有执行。代码如下,望前辈指点一二

Private WithEvents Doit() as dothat
Public Event Doit()
Dim I As Integer
Dim dothat

Private Sub Doit()
Me.Caption = "now event Doit"
MsgBox "look"
End Sub

Private Sub CWButton1_ValueChanged(ByVal Value As Boolean)

If CWButton1.Value = True Then
Timer1.Enabled = True
Else
Timer1.Enabled = False
End If

End Sub

Private Sub Form_Load()
Timer1.Interval = 600
Timer1.Enabled = False
End Sub

Private Sub Timer1_Timer()
Label1.Caption = Time
I = I + 1
If I > 5 Then
RaiseEvent Doit
End If
Me.Caption = I
End Sub


[解决办法]
Private WithEvents Doit() as dothat
这是VB6代码吗?WithEvents 怎么能使用数组?

要使用事件机制,必须
在类模块或者控件或者窗口模块中定义事件 (event 声明)并且在适当的时候raiseevent

比如 class1中
event doit(参数表)
..............

sub aSub(....)
raiseevent doit(参数)
end sub


在窗口模块或者其他类、控件模块中

dim withevents x as class1

sub form_load
set x=new class1 'withevents声明时,不能在声明中直接使用new
end sub

private sub [color=#FF0000x_doit(参数表)][/color]
'处理事件代码
end sub


[解决办法]
引用:
引用:
注意,如果控件中raiseevent,那么在其容器中,则不需要声明变量,可以直接进行事件处理但是我上面的代码中,执行后并没有成功执行事件中的内容。但是从raiseevent那一句已经执行了。这个语句只能在类模块中用吗?找过好些例子都是用在类模块中的。


类模块,窗口模块,控件模块中都可以,就是不能用于bas模块,其它都可以

读书人网 >VB

热点推荐