我在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
答案 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
玩得开心!