Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/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
C# Visual Studio Intellisense不显示事件_C#_Vb.net_Visual Studio_Visual Studio 2017_Intellisense - Fatal编程技术网

C# Visual Studio Intellisense不显示事件

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

我正在编写一个使用TeamSpeak SDK的
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的根本问题。