AddressOf 运算符 VB6 的使用无效
Invalid use of AddressOf operator VB6
我的第一个 post 在这里。
我有 c# .dll,用于扫描仪。
我打算将它与一些遗留的 vb6 应用程序一起使用。
.dll 使用 RaiseArgs 通过扫描的代码引发事件。
我正在尝试编写用于 VB6 应用程序的 .ocx 库。
为了在 .ocx 库中捕获此事件,我正在尝试调整此代码:
Sub TestEvents()
Dim Obj As New Class1
' Associate an event handler with an event.
AddHandler Obj.Ev_Event, AddressOf EventHandler
' Call the method to raise the event.
Obj.CauseSomeEvent()
' Stop handling events.
RemoveHandler Obj.Ev_Event, AddressOf EventHandler
' This event will not be handled.
Obj.CauseSomeEvent()
End Sub
Sub EventHandler()
' Handle the event.
MsgBox("EventHandler caught event.")
End Sub
Public Class Class1
' Declare an event.
Public Event Ev_Event()
Sub CauseSomeEvent()
' Raise an event.
RaiseEvent Ev_Event()
End Sub
End Class
但是我越来越
调用时无效使用 AddressOf 运算符错误:AddHandler Obj.Ev_Event, AddressOf EventHandler
此错误的可能原因是什么?
我怀疑我没有朝着正确的方向解决这个任务,所以这是解决这个问题的更好方法吗?
我认为您混合使用了 VB6 和 VB.NET。在 VB6 中,如果您想为您自己创建的对象上的事件添加一个事件处理程序(而不是使用 Forms 设计器添加),您可以这样做:
Private WithEvents mObjectThatHasEvents As Class1
Private Sub StartListeningToEvents()
If mObjectThatHasEvents Is Nothing Then
Set mObjectThatHasEvents = New Class1
End If
End Sub
Private Sub TriggerEvent()
mObjectThatHasEvents.CauseSomeEvent
End Sub
'Assumes that Class1 has an event called "MyEvent".
Private Sub mObjectThatHasEvents_MyEvent()
MsgBox("EventHandler caught event.")
End Sub
Private Sub StopListeningToEvents()
Set mObjectThatHasEvents = Nothing
End Sub
如果您需要在不监听其事件的情况下保持事件源对象处于活动状态,您将需要通过不是 "WithEvents".
的变量对其进行第二次引用
我应该指出 VB6 IDE 将识别事件源。在代码窗格中,使用顶部的下拉菜单 select 对象和事件。 IDE 会自动为您存根(就像按钮或其他任何东西一样)。
tcarvin 几乎解释了你必须做什么,但这是你的代码,经过调整:
Private WithEvents mObjWithEvents As Class1
Sub TestEvents()
Dim Obj As New Class1
Set mObjWithEvents = Obj
' Call the method to raise the event.
Obj.CauseSomeEvent
' Stop handling events.
Set mObjWithEvents = Nothing
' This event will not be handled.
Obj.CauseSomeEvent
End Sub
Private Sub mObjWithEvents_EvEvent()
' Handle the event.
MsgBox ("EventHandler caught event.")
End Sub
还有你的 Class1:
Public Event EvEvent()
Public Sub CauseSomeEvent()
' Raise an event.
RaiseEvent EvEvent
End Sub
请注意,Ev_Event 已重命名为 EvEvent。
我的第一个 post 在这里。
我有 c# .dll,用于扫描仪。 我打算将它与一些遗留的 vb6 应用程序一起使用。
.dll 使用 RaiseArgs 通过扫描的代码引发事件。
我正在尝试编写用于 VB6 应用程序的 .ocx 库。
为了在 .ocx 库中捕获此事件,我正在尝试调整此代码:
Sub TestEvents()
Dim Obj As New Class1
' Associate an event handler with an event.
AddHandler Obj.Ev_Event, AddressOf EventHandler
' Call the method to raise the event.
Obj.CauseSomeEvent()
' Stop handling events.
RemoveHandler Obj.Ev_Event, AddressOf EventHandler
' This event will not be handled.
Obj.CauseSomeEvent()
End Sub
Sub EventHandler()
' Handle the event.
MsgBox("EventHandler caught event.")
End Sub
Public Class Class1
' Declare an event.
Public Event Ev_Event()
Sub CauseSomeEvent()
' Raise an event.
RaiseEvent Ev_Event()
End Sub
End Class
但是我越来越
调用时无效使用 AddressOf 运算符错误:AddHandler Obj.Ev_Event, AddressOf EventHandler
此错误的可能原因是什么?
我怀疑我没有朝着正确的方向解决这个任务,所以这是解决这个问题的更好方法吗?
我认为您混合使用了 VB6 和 VB.NET。在 VB6 中,如果您想为您自己创建的对象上的事件添加一个事件处理程序(而不是使用 Forms 设计器添加),您可以这样做:
Private WithEvents mObjectThatHasEvents As Class1
Private Sub StartListeningToEvents()
If mObjectThatHasEvents Is Nothing Then
Set mObjectThatHasEvents = New Class1
End If
End Sub
Private Sub TriggerEvent()
mObjectThatHasEvents.CauseSomeEvent
End Sub
'Assumes that Class1 has an event called "MyEvent".
Private Sub mObjectThatHasEvents_MyEvent()
MsgBox("EventHandler caught event.")
End Sub
Private Sub StopListeningToEvents()
Set mObjectThatHasEvents = Nothing
End Sub
如果您需要在不监听其事件的情况下保持事件源对象处于活动状态,您将需要通过不是 "WithEvents".
的变量对其进行第二次引用我应该指出 VB6 IDE 将识别事件源。在代码窗格中,使用顶部的下拉菜单 select 对象和事件。 IDE 会自动为您存根(就像按钮或其他任何东西一样)。
tcarvin 几乎解释了你必须做什么,但这是你的代码,经过调整:
Private WithEvents mObjWithEvents As Class1
Sub TestEvents()
Dim Obj As New Class1
Set mObjWithEvents = Obj
' Call the method to raise the event.
Obj.CauseSomeEvent
' Stop handling events.
Set mObjWithEvents = Nothing
' This event will not be handled.
Obj.CauseSomeEvent
End Sub
Private Sub mObjWithEvents_EvEvent()
' Handle the event.
MsgBox ("EventHandler caught event.")
End Sub
还有你的 Class1:
Public Event EvEvent()
Public Sub CauseSomeEvent()
' Raise an event.
RaiseEvent EvEvent
End Sub
请注意,Ev_Event 已重命名为 EvEvent。