我在VS2008
操作系统上使用Win 7
。我的问题是在我的应用程序中使用class -- class1
读取扫描仪数据,因此一旦读取数据,我就发出代码以从另一个class -- class2
引发事件。我有多种形式可以使用这些扫描数据,因此,无论顶层形式如何都能处理。我可以看到引发的事件,但活动表单上的处理程序没有响应。你能告诉我我的代码中有什么问题吗?
class1读取扫描数据并调用class2以引发事件:
Public Class class1
Private WithEvents evnt As New class2
Private Sub DataReceived()
evnt.ScanData()
End Sub
End class 'end class1
Public Class class2
Public Event NewScanData(ByVal ScanData As String)
Public Sub ScanData()
RaiseEvent NewScanData(ScanData)
'MsgBox("Invoked event")
End Sub
End Class 'end class2
**注意:我可以看到Invoked事件显示的消息,这意味着事件确实被引发。但下面的表单类似乎没有收到该事件:
Public Class Form1
Friend WithEvents event1 As New class2
Private Sub GetScanData(ByVal ScanData As String) Handles event1.NewScanData
'do something to process scanned data
End sub
End Class
谢谢你
答案 0 :(得分:0)
我怀疑Form1中的event1实例与调用ScanData的实例不同。您可能有2个class2实例。一个是ScanData调用它,另一个是Form1完全与它断开连接。在某个地方,我认为您需要设置Form1.event1 = class1.evnt
或class1.evnt = Form1.event1
。
答案 1 :(得分:0)
我稍微修改了你的Form1代码。我在其上放了一个调用ScanData方法的按钮,这导致在Form1中触发event1。也许这会有所帮助吗?
Public Class Form1
Friend WithEvents event1 As New Class2
Private Sub GetScanData(ByVal ScanData As String) Handles event1.NewScanData
'do something to process scanned data
MessageBox.Show(ScanData)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
event1.ScanData() ' if you call this method event1's NewScanData fires
End Sub
End Class