在其他表单上引发事件

时间:2019-12-08 14:15:04

标签: vb.net

我在VB.Net中有两种分开的形式(用户控件A和B)。当一个按钮单击formB时,我想在formA上引发一个事件。那怎么办我搜索了stackoverflow.com,并检查了几个相关的解决方案,但它们对我不起作用。不知道是什么问题!请帮我。 例如,我尝试了以下代码:

FormA:

Dim MyEditForm As New ucEmployeeTimeEdit
'some code for showing and preparing MyEditForm 
Private Sub GetSomeClick() Handles MyEditForm.MyClick
    System.Console.WriteLine("test")
End Sub

FormB:

Public Event MyClick()
Private Sub BtnDelet_Click(sender As Object, e As EventArgs) Handles btnDelet.Click
    RaiseEvent MyClick()
End Sub

2 个答案:

答案 0 :(得分:3)

some code部分的某个地方,您需要使用AddHandler来“组织”该事件:

Public Sub Foo()
    Dim MyEditForm As New ucEmployeeTimeEdit
    'some code for showing and preparing MyEditForm 
    AddHandler MyEditForm.MyClick, AddressOf GetSomeClick
End Sub

Private Sub GetSomeClick()
    System.Console.WriteLine("test")
End Sub

请注意,GetSomeClick()的末尾没有“ Handles”子句。这是因为您的ucEmployeeTimeEdit实例是一个 local 变量。

如果您在类级别将其声明为WithEvents,则可以使用“ Handles”子句(因此不再需要AddHandler调用)。

答案 1 :(得分:3)

虽然Idle_Mind的答案很好,但这是另一种具有不同优势的方法。 (编辑:我刚刚注意到他也提到了这一点,因此您可以认为这是对此主题的详尽阐述)

如果将FormB保留为FormA中的模式变量,则可以告诉VB您要使用它的事件。这是一些骨架代码向您展示:

Public Class FormA
    Private WithEvents myFormB As FormB

    'rest of the code for FormA
    'you can use FormB's events like this

    Private Sub GetSomeClicks() Handles myFormB.MyClick
        'code code code
    End Sub
End Class

Public Class FormB
    Public Event MyClick()
End Class

玩得开心!