【问题标题】:How can I RaiseEvent in VB.net如何在 VB.net 中引发事件
【发布时间】:2015-12-15 19:09:51
【问题描述】:

我的解决方案中有 2 个项目。
假设项目 A 和项目 B。

Proj A 正在举办我的自定义活动。并且同一个项目正在使用 Vb.net 的 RaiseEvent 函数引发该事件,并且项目 B 具有项目 A 的参考。
Proj B 正在为 Proj A 的自定义事件添加处理程序。

但我的自定义事件无法引发。 谁能解释一下我该怎么做?

编辑:

项目A

Public Shared Event cardReadComplete(ByVal data As String)
 Public Sub kbHook_KeyDown(ByVal Key As Windows.Forms.Keys) 
  IO.File.AppendAllText("E:\log.log", Key.ToString() & vbCrLf)
 RaiseEvent cardReadComplete(encryptedData)
End Sub

项目 B

 Private Sub handleSwipeCardRequest(ByVal msgText As String)
        AddHandler CardReader.Main.cardReadComplete, AddressOf sendSwipeCardDetails
        CardReader.Main.cardReadComplete()
End Sub

我先调用handleSwipeCardRequest 函数,然后引发它的事件。

【问题讨论】:

  • 您是否使用 WithEvents 关键字声明了保存 Proj A 中任何类型实例的变量?请发布一些示例代码。
  • 您似乎混淆了 Sub 和 Event 名称。看起来你必须按下一个键才能触发事件。虽然它是一个没有 Handles 关键字的 KeyDown 事件,所以它可能永远不会触发。

标签: vb.net raiseevent


【解决方案1】:

kbHook_KeyDown 被调用时,您的事件将被引发,假设它在AddHandler 行执行后被调用。您确定调用了 KeyDown 函数吗?正如 Hans Passant 所说,您可能缺少 Handles 关键字:

Public Sub kbHook_KeyDown(ByVal Key As Windows.Forms.Keys) Handles kbHook.KeyDown
    ...
End Sub

【讨论】:

    【解决方案2】:

    另一种方式:

    AddHandler kbHook.KeyDown , AddressOf Me.kbHook_KeyDown
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多