如何在Vb.Net中引发第三方DLL事件

如何在Vb.Net中引发第三方DLL事件,vb.net,vb6-migration,Vb.net,Vb6 Migration,我已经将一些vb6组件迁移到了dot net,下面是对该问题的详细解释 我有一个wrapper控件,它引用了第三方FarPoint控件。在包装器控件中,我将引发如下事件 'Declaration of the event Public Event ButtonClicked(ByVal Sender As System.Object, ByVal e As AxFPSpreadADO._DSpreadEvents_ButtonClickedEvent) 'implementatio

我已经将一些vb6组件迁移到了dot net,下面是对该问题的详细解释

我有一个wrapper控件,它引用了第三方FarPoint控件。在包装器控件中,我将引发如下事件

'Declaration of the event
 Public Event ButtonClicked(ByVal Sender As System.Object, ByVal e As 
  AxFPSpreadADO._DSpreadEvents_ButtonClickedEvent) 

 'implementation of the event

Private Sub sprSpread_ButtonClicked(sender As Object, e As AxFPSpreadADO._DSpreadEvents_ButtonClickedEvent) Handles sprSpread.ButtonClicked
    RaiseEvent ButtonClicked(sender, e)
End Sub
 Private Sub InstSpread1_ButtonClicked(Sender As Object, e As AxFPSpreadADO._DSpreadEvents_ButtonClickedEvent) Handles InstSpread1.ButtonClicked

End Sub
所以上述包装器控件在另一个组件中引用,而另一个组件只是一个调用组件

因此,在调用组件中,我在表单上添加了包装器控件,并生成了ButtonClicked事件,如下所示

'Declaration of the event
 Public Event ButtonClicked(ByVal Sender As System.Object, ByVal e As 
  AxFPSpreadADO._DSpreadEvents_ButtonClickedEvent) 

 'implementation of the event

Private Sub sprSpread_ButtonClicked(sender As Object, e As AxFPSpreadADO._DSpreadEvents_ButtonClickedEvent) Handles sprSpread.ButtonClicked
    RaiseEvent ButtonClicked(sender, e)
End Sub
 Private Sub InstSpread1_ButtonClicked(Sender As Object, e As AxFPSpreadADO._DSpreadEvents_ButtonClickedEvent) Handles InstSpread1.ButtonClicked

End Sub
我正在获取类型AxFPSpreadADO.\u DSpreadEvents\u按钮ClickedEvent未定义错误,我还需要在调用组件中引用FarPoint以消除此错误


如何在调用组件中引发ButtonClicked event而不引用调用组件中的FarPoint?

如果我正确理解了这个问题,问题是您正在为e参数声明具有第三方类型的事件:

Public Event ButtonClicked(ByVal Sender As System.Object, ByVal e As AxFPSpreadADO._DSpreadEvents_ButtonClickedEvent)
您应该做的是定义您自己的继承EventArgs的类:

然后将其用于您自己的活动。你可以这样做:

Public Event ButtonClicked(sender As System.Object, e As ButtonClickedEventArgs)
Public Event ButtonClicked As EventHandler(Of ButtonClickedEventArgs)
但你应该这样做:

Public Event ButtonClicked(sender As System.Object, e As ButtonClickedEventArgs)
Public Event ButtonClicked As EventHandler(Of ButtonClickedEventArgs)
在您自己的组件中,您应该完全实现事件模式。这意味着有一种专门的方法来引发事件:

Protected Overridable Sub OnButtonClicked(e As ButtonClickedEventArgs)
    RaiseEvent ButtonClicked(Me, e)
End Sub
然后,在第三方组件的事件处理程序中,您可以将接收到的AXFPSPREADADDO.\u DSpreadEvents\u ButtonClickedEvent对象中的数据复制到您自己的ButtonClickedEventArgs对象中。我不知道您需要什么属性,所以我将仅使用示例:

Private Sub sprSpread_ButtonClicked(sender As Object, e As AxFPSpreadADO._DSpreadEvents_ButtonClickedEvent) Handles sprSpread.ButtonClicked
    Dim eventArgs As New ButtonClickedEventArgs

    With eventArgs
        .Name = e.Name
        .Number = e.Number
    End With

    OnButtonClicked(e)
End Sub
<>编辑:您也可以考虑将复制构造函数添加到您自己的事件ARGS类中,这样您就不必在多个地方使用复制代码,例如

Public Class ButtonClickedEventArgs
    Inherits EventArgs

    Public Sub New(e As AxFPSpreadADO._DSpreadEvents_ButtonClickedEvent)
        Name = e.Name
        Number = e.Number
    End Sub

    '...

End Class
然后像这样提出你的活动:

Private Sub sprSpread_ButtonClicked(sender As Object, e As AxFPSpreadADO._DSpreadEvents_ButtonClickedEvent) Handles sprSpread.ButtonClicked
    OnButtonClicked(New ButtonClickedEventArgs(e))
End Sub

你的术语似乎有点离题,所以我想确保你以正确的方式处理这个问题。如果您正在创建一个包装器,那么应该发生的是,您正在接收来自第三方组件事件或回调或其他任何内容的通知,然后,当这种情况发生时,您将引发自己的事件。这就是你在做的吗?SPR是您正在包装的第三方组件吗?