如何从vb6模块引发事件?

如何从vb6模块引发事件?,vb6,Vb6,我开发了一个自定义的VisualBasic6控件,并声明了一些自定义事件。在vb6中,是否可以从模块引发这些事件,或者我需要在控件中实现一个特殊的“代理”方法来执行此操作?RaiseEvent: 编译错误: 仅在对象模块中有效 (这是有道理的。) 是的,您的类需要一个Friend方法,您可以调用该方法从模块中引发事件: 类别: 模块: 也许不完全是您要寻找的答案,但可以使用普通模块中的类似事件的过程: 首先定义一个回调接口: IEventClient(类模块): MyModule: Option

我开发了一个自定义的VisualBasic6控件,并声明了一些自定义事件。在vb6中,是否可以从模块引发这些事件,或者我需要在控件中实现一个特殊的“代理”方法来执行此操作?

RaiseEvent:

编译错误:
仅在对象模块中有效

(这是有道理的。)

是的,您的类需要一个
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