65.9K
CodeProject 正在变化。 阅读更多。
Home

应用程序的全局事件

2008年8月22日

CPOL

1分钟阅读

viewsIcon

35198

downloadIcon

536

如何在您的应用程序中使用事件,以便多个接收者可以处理。

引言

有时,应用程序中的任何窗体都可以接收另一个任务的事件,以便处理一些特定任务,这很有用。例如,您有一个数据库,其中包含用于组合框的查找值。现在,如果您更新这些查找值,那么所有打开的窗体也应该更新它们的组合框,不是吗?但是我们如何处理这个问题呢?

背景

当我寻找这个问题的解决方案时,一位名为 Sascha Kiefer 的 Xing 好友提示我使用一些委托(使用 C#...)。但是,在 VB.NET 中使用委托不是必需的,经过更多的研究,我用几行代码就解决了这个问题。

使用代码

首先,您需要一个包含事件和用于引发事件的程序的类。

Public Class GlobalEventing
    Public Shared Event SpecialEventRaised(ByVal sender As Object, _
           ByVal type As String, ByVal msg As String)

    Public Shared Sub SpecialEvent(ByVal sender As Object, _
           ByVal type As String, ByVal msg As String)
        RaiseEvent SpecialEventRaised(sender, type, msg)
    End Sub
End Class

现在,最简单的方法就是调用该程序来引发事件...

GlobalEventing.SpecialEvent(me, "my typ", "my message")

在您的窗体中,只需添加一个对象引用、一个 addhandler 语句和一个 addressof 程序来处理事件即可。

Public Class ChildForm
    Inherits System.Windows.Forms.Form
  Dim gEvent As GlobalEventing
  (...)

  Private Sub ChildForm_Load(ByVal sender As System.Object, _
          ByVal e As System.EventArgs) Handles MyBase.Load
      AddHandler gEvent.SpecialEventRaised, AddressOf SpecialEventFired
  End Sub

  Private Sub SpecialEventFired(ByVal sender As Object, _
              ByVal typ As String, ByVal msg As String)
    txtOutput.AppendText(Now().ToLocalTime.ToString & " received " & _
                         typ & " / " & msg & vbCrLf)
  End Sub
End Class

示例

在示例中,您会找到一个带有 MDI 窗体的解决方案(在 VS2003 中)。每个子窗体都可以接收该事件 - 请仔细查看。

个人

再次说明,我看到经常复杂的提问可以得到非常简单的答案 - 但您必须找到它们。希望您能利用这段小代码... 享受吧!欢迎提出任何意见!

© . All rights reserved.