Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用通用类在两个窗体之间共享事件_Vb.net - Fatal编程技术网

Vb.net 使用通用类在两个窗体之间共享事件

Vb.net 使用通用类在两个窗体之间共享事件,vb.net,Vb.net,我想通过公共类与公共共享事件将事件共享到另一个窗体 我的代码设置如下: Form1是生成button.click事件的主窗体 Form2是面板控件中Form1中显示的子窗体,如果生成事件,则执行子窗体 为了共享数据,我使用了一个commonData类来共享我所需要的唯一数据,因为我想将私有函数和变量保存在单一的表单中 有人能帮我弄清楚我想做什么吗 像这样的,但很有效 Public Class commonData Public Shared Event event1() End class

我想通过公共类与公共共享事件将事件共享到另一个窗体

我的代码设置如下: 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

有很多方法可以做到这一点,但是这一个(就是其中之一)我希望可以帮助您了解如何在表单或其他类之间共享事件。 首先,您需要的是公共模块(您可以选择使用类,但
仅在模块中使用)

作为类的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
表格2:

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
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

你能出示密码吗?要共享数据,我使用commonData类-不提供information@FabiocommonData类是一个简单的公共类,我在其中放置了一个变量,以便在form1和form2之间共享。我想用这个方法来分享一个事件。你能解释一下你所说的分享一个事件是什么意思吗?通过分享一个事件,你到底想达到什么目的?@fabio我添加了一些代码,以便更容易理解我想为回复做些什么!如果我想坚持使用类而不是模块,会有什么变化?如果您的事件成为共享事件,更好的选择是使用模块而不是类(对我来说更简单)。但是,把它当作你的做法的替代品。但是,您可以将CommonData.RaiseMyGlobalEvent(buttonCaller,eventArgs)作为共享子项调用到everywhere,并将MyGlobalEvent的侦听器作为共享事件在表单中的任何位置调用。玩得开心;)我只使用了代码的一部分来做我想做的事情!不要忘记在窗体关闭时删除事件。