Visual Basic.NET 7.x (2002/03)Visual Basic 9 (2008)Visual Basic 8 (2005)Visual Studio .NET 2003Visual Studio 2008Visual Studio 2005架构师初学者中级开发者Visual StudioWindows.NETVisual Basic
应用程序的全局事件






2.73/5 (9投票s)
如何在您的应用程序中使用事件,以便多个接收者可以处理。
引言
有时,应用程序中的任何窗体都可以接收另一个任务的事件,以便处理一些特定任务,这很有用。例如,您有一个数据库,其中包含用于组合框的查找值。现在,如果您更新这些查找值,那么所有打开的窗体也应该更新它们的组合框,不是吗?但是我们如何处理这个问题呢?
背景
当我寻找这个问题的解决方案时,一位名为 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 中)。每个子窗体都可以接收该事件 - 请仔细查看。
个人
再次说明,我看到经常复杂的提问可以得到非常简单的答案 - 但您必须找到它们。希望您能利用这段小代码... 享受吧!欢迎提出任何意见!