C# Visual Studio Intellisense不显示事件
我正在编写一个使用TeamSpeak SDK的C# Visual Studio Intellisense不显示事件,c#,vb.net,visual-studio,visual-studio-2017,intellisense,C#,Vb.net,Visual Studio,Visual Studio 2017,Intellisense,我正在编写一个使用TeamSpeak SDK的VB.Net程序。它附带了C示例,我在将它们转换为VB时没有遇到任何问题 但是,我正在尝试为名为Connection的类实现一个事件处理程序。在C#中,当我在连接变量后点击一个点时,Intellisense显示一个包含所有选项的下拉列表: 但是当我处理VB代码时(也在VS 2017中),做同样的事情不包括事件: 请注意,显示的属性和方法是相同的,只是无法选择事件。我对C使用相同的“using”和VB使用相同的“Imports”来引用TeamSpe
VB.Net
程序。它附带了C
示例,我在将它们转换为VB
时没有遇到任何问题
但是,我正在尝试为名为Connection的类实现一个事件处理程序。在C#
中,当我在连接变量后点击一个点时,Intellisense
显示一个包含所有选项的下拉列表:
但是当我处理VB代码时(也在VS 2017
中),做同样的事情不包括事件:
请注意,显示的属性和方法是相同的,只是无法选择事件。我对C
使用相同的“using”和VB
使用相同的“Imports”来引用TeamSpeak.Sdk.Client
。我有一个几百行的VB程序,它成功地实现了TeamSpeak SDK
,所以几乎所有的东西都在工作。只是现在我想添加事件处理,我遇到了一个障碍
下一步我应该尝试什么?此C代码的VB等价物:
myObject.SomeEvent+=SomeMethod;
这是:
AddHandler myObject.SomeEvent,SomeMethod的地址
如果键入
AddHandler
关键字,则Intellisense将显示可用事件。对于C#代码,您可以选择与属性或方法相同的上下文中的事件,因此将它们一起显示是有意义的。在VB中,只能在AddHandler
语句中使用事件,因此只能在该上下文中看到事件。在VB中有两种连接事件的方法。@jmcilhinney显示的AddHandler
方法,或者通过使用处理关键字,如下所示:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'do something useful with the button click
End Sub
如果您这样做,您将在处理
关键字后获得Intellisense。Sub
的参数是可选的-如果您没有使用sender
或e
,请不要将它们放在声明中
为了使其工作,需要使用with events
关键字声明“控件”:
Public WithEvents Button1 As New Button
VB.NET以不同的方式连接事件处理程序,因此在上述上下文中以intellisense显示它们是没有意义的。它已编译,但从未实际处理该事件。然后我看到了更新后的页面,其中有一个链接,指向专门关于事件处理的问题。我实现了WithEvents/Handles代码,它成功了。非常感谢。如果没有你的帮助,我会在土里挖很长时间的。工作得很好!非常感谢您的快速回复。你和@jmcilhinney是StackOverflow社区的功劳。AddHandler
方法往往吸引传统的C#程序员(因为它非常接近+=
方法)。Handles
方法倾向于吸引老手VB程序员,我相信这就是在VB6中连接东西的方式。如果你进入VB一段时间,Handles
方法会很快对你产生影响。值得注意的是,由于C#只有一种注册事件处理程序的方法,因此在WinForms designer中创建事件处理程序将使用这种方法,但即使AddHandler
是VB的等效方法,在VB中的设计器中创建事件处理程序将使用with events
和Handles
。一般来说,在VB中使用AddHandler
的唯一原因是,如果您在运行时创建对象,因此无法用events
声明字段,以引用它。还值得注意的是WithEvents
/句柄
跟随变量,而AddHandler
跟随对象。这意味着,将一个新对象分配给一个声明为WithEvents
的字段将导致处理新对象的事件,而不再处理旧对象的事件。另一方面,使用AddHandler
在当时引用的特定对象上注册事件处理程序,而不管该变量之后发生了什么。@Flydog57,关于否决票,我猜您的答案实际上没有解决所问的特定问题,尽管它可能解决了OP的根本问题。