vb.net - 使用公共类在 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
解决方案
有很多技术可以做到这一点,但我希望这个(这是其中之一)可以帮助您了解如何在表单或其他类之间共享事件。首先,您需要的是公共模块(您可以使用类代替,这是您的选择;但<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
推荐阅读
- ffmpeg - ffmpeg 连接两个具有相同纵横比的视频文件,而 fps 仍然会丢失输出
- c# - LINQPad 缺少 Grpc 的 dll
- javascript - 如何在 JavaScript 中的对象中插入方法并调用它?
- excel - 在excel中为竞争对手反向链接分析数据集隔离根域的故障排除公式
- javascript - 如何使用来自 JSON 的数据使用 jQuery 显示解码的 html 文本
- python - 主题标签字符未正确显示
- node.js - 谷歌云控制台设置防火墙上的节点检查
- testing - 测试 Web 应用程序时在 JMeter 中获取未知主机异常
- html - 当浏览器响应时,强制第二个 Div 折叠在第一个 Div 之下
- python - 如何根据定义的日期范围为每个组创建更多行?