首页 > 解决方案 > 使用公共类在 2 个表单之间共享事件

问题描述

我想通过具有公共共享事件的公共类将事件共享到另一个表单。

我的代码设置如下: Form1 是生成 button.click 事件的主窗体 Form2 是在面板控件中 Form1 中显示的子窗体,如果生成事件,则执行子窗体。

为了共享数据,我使用了一个 commonData 类来共享我需要的唯一数据,因为我想将私有函数和变量保留在单个表单中。

有人可以帮我弄清楚我想做什么吗?

像这样的东西,但工作

Public Class commonData
  Public Shared Event event1()
End class

Public Class Form1
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles button1.Click 
  RaiseEvent commonData.event1()
  End Sub
End class

Public Class Form2
  Private Sub eventFired(sender As Object, e As EventArgs) Handles commonData.event1
  MsgBox("event")
  End Sub
End class

标签: vb.net

解决方案


有很多技术可以做到这一点,但我希望这个(这是其中之一)可以帮助您了解如何在表单或其他类之间共享事件。首先,您需要的是公共模块(您可以使用类代替,这是您的选择;但<Extension()>只能在模块中使用)。

CommonData 作为类和 ExtensionUtils 作为扩展模块:

Imports System.Runtime.CompilerServices

Public Class CommonData

    Public Shared Event MyGlobalEvent(eventSender As Object, otherParams As String)
    Shared Sub RaiseMyGlobalEvent(eventSender As Object, otherParams As String)
        RaiseEvent MyGlobalEvent(eventSender, otherParams)
    End Sub

End Class

Module ExtensionUtils
    <Extension()>
    Public Sub ButtonClick(ByVal buttonCaller As Button, eventArgs As String)
        CommonData.RaiseMyGlobalEvent(buttonCaller, eventArgs)
    End Sub
End Module

这里是实现: 在这个例子中,我在 Form2 中使用了一个名为“Button1”的按钮,当我点击它时,在 Form1 中显示一个 msgbox。

表格1:

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Form2.Show()

        AddHandler CommonData.MyGlobalEvent, Sub(objSender As Object, message As String)
                                                 MsgBox(message & vbCrLf & " But I'm telling you that from form " & Me.Name)
                                             End Sub
    End Sub
End Class

表格2:

Public Class Form2
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        AddHandler Button1.Click, Sub()
                                      Button1.ButtonClick(("I'm clicked from form " & Me.Name))
                                  End Sub


    End Sub
End Class

推荐阅读