我正在写一个使用VB.Net
的TeamSpeak SDK
程序。它附带了C#
示例,我毫不费力地将它们转换为VB
。
但是,我正在尝试为名为Connection的类实现事件处理程序。在C#
中,当我在Connection变量后点击一个点时,Intellisense
会显示所有选项的下拉列表:
但是当我处理VB代码(也在VS 2017
中)时,做同样的事情不包括事件:
请注意,显示的属性和方法是相同的,只是无法选择事件。我使用相同的“使用”用于C#
和“进口”用于VB
以引用TeamSpeak.Sdk.Client
。我有一个工作的几百行的VB程序,成功实现了TeamSpeak SDK
,所以几乎一切都正常。只是现在我想要添加事件处理我遇到了麻烦。
我接下来应该尝试什么?
这个C#代码的VB等价物:
myObject.SomeEvent += SomeMethod;
这是:
AddHandler myObject.SomeEvent, AddressOf SomeMethod
如果您键入AddHandler
关键字,那么Intellisense将显示可用事件。对于C#代码,您可以在与属性或方法相同的上下文中选择事件,因此将它们全部显示在一起是有意义的。在VB中,唯一可以使用事件的是AddHandler
语句,因此您只能在该上下文中查看事件。
有两种方法可以在VB中连接事件。 @jmcilhinney显示的AddHandler
方法,或者使用Handles
关键字,如下所示:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'do something useful with the button click
End Sub
如果你这样做,你将在Handles
关键字之后获得Intellisense。您的Sub
的参数是可选的 - 如果您不使用sender
或e
,请不要将它们放在声明中
为了使其工作,需要使用WithEvents
关键字声明“Control”:
Public WithEvents Button1 As New Button