如何从vb6模块引发事件?
我开发了一个自定义的VisualBasic6控件,并声明了一些自定义事件。在vb6中,是否可以从模块引发这些事件,或者我需要在控件中实现一个特殊的“代理”方法来执行此操作?RaiseEvent: 编译错误:如何从vb6模块引发事件?,vb6,Vb6,我开发了一个自定义的VisualBasic6控件,并声明了一些自定义事件。在vb6中,是否可以从模块引发这些事件,或者我需要在控件中实现一个特殊的“代理”方法来执行此操作?RaiseEvent: 编译错误: 仅在对象模块中有效 (这是有道理的。) 是的,您的类需要一个Friend方法,您可以调用该方法从模块中引发事件: 类别: 模块: 也许不完全是您要寻找的答案,但可以使用普通模块中的类似事件的过程: 首先定义一个回调接口: IEventClient(类模块): MyModule: Option
仅在对象模块中有效 (这是有道理的。) 是的,您的类需要一个
Friend
方法,您可以调用该方法从模块中引发事件:
类别:
模块:
也许不完全是您要寻找的答案,但可以使用普通模块中的类似事件的过程: 首先定义一个回调接口: IEventClient(类模块): MyModule:
Option Explicit
Public EventClients As Collection
Public Sub OnPropertyChanged(property As String)
Dim eventsClient As IEventsClient
Dim element As Variant
For Each element In EventClients
Set eventsClient = element
eventsClient.PropertyChanged MyControl, property
Next
End Sub
Public Sub RaiseSomePropertyChanged()
OnPropertyChanged "SomeProperty"
End Sub
主要形式:
Option Explicit
Implements IEventsClient
Private Sub Form_Load()
'Entry point of the application'
Set MyModule.EventClients = New Collection
MyModule.EventClients.Add Me
End Sub
Private Sub IEventsClient_PropertyChanged(sender As Object, property As String)
If TypeOf sender Is MyControl Then
Select Case property
Case "SomeProperty"
' DoSomething'
End Select
End If
End Sub
这是一个有用的技巧,但你是对的,我认为这不是OP想要的
Option Explicit
Public Sub PropertyChanged(sender As Object, property As String)
End Sub
Option Explicit
Public EventClients As Collection
Public Sub OnPropertyChanged(property As String)
Dim eventsClient As IEventsClient
Dim element As Variant
For Each element In EventClients
Set eventsClient = element
eventsClient.PropertyChanged MyControl, property
Next
End Sub
Public Sub RaiseSomePropertyChanged()
OnPropertyChanged "SomeProperty"
End Sub
Option Explicit
Implements IEventsClient
Private Sub Form_Load()
'Entry point of the application'
Set MyModule.EventClients = New Collection
MyModule.EventClients.Add Me
End Sub
Private Sub IEventsClient_PropertyChanged(sender As Object, property As String)
If TypeOf sender Is MyControl Then
Select Case property
Case "SomeProperty"
' DoSomething'
End Select
End If
End Sub