【问题标题】:Visual Studio Intellisense not Showing Events [duplicate]Visual Studio Intellisense 不显示事件 [重复]
【发布时间】:2019-02-16 13:20:58
【问题描述】:

我正在编写一个使用TeamSpeak SDKVB.Net 程序。它带有C# 示例,我可以毫不费力地将它们转换为VB

但是,我正在尝试为名为 Connection 的类实现事件处理程序。在 C# 中,当我在 Connection 变量后点击一个点时,Intellisense 会显示一个包含所有选项的下拉菜单:

但是当我处理 VB 代码时(也在 VS 2017 中),做同样的事情不包括事件:

注意显示的属性和方法是一样的,只是没有办法选择事件。我对C# 使用相同的“使用”,对VB 使用相同的“导入”来引用TeamSpeak.Sdk.Client。我有一个成功实现TeamSpeak SDK 的几百行有效的 VB 程序,所以几乎一切正常。只是现在我想添加事件处理时遇到了障碍。

接下来我应该尝试什么?

【问题讨论】:

  • VB.NET 以不同的方式连接事件处理程序,因此在智能感知中显示它们是没有意义的在上述上下文中
  • 后续:我首先实现了下面建议的 AddHandler 代码。它已编译,但永远不会真正处理该事件。然后,我看到了更新的页面,其中包含指向专门关于事件处理的问题的链接。我实现了 WithEvents/Handles 代码并且它有效。

标签: c# vb.net visual-studio visual-studio-2017 intellisense


【解决方案1】:

此 C# 代码的 VB 等效项:

myObject.SomeEvent += SomeMethod;

这是:

AddHandler myObject.SomeEvent, AddressOf SomeMethod

如果您键入 AddHandler 关键字,那么 Intellisense 将向您显示可用的事件。对于 C# 代码,您可以在与属性或方法相同的上下文中选择事件,因此将它们一起显示是有意义的。在 VB 中,您只能在 AddHandler 语句中使用事件,因此您只能在该上下文中看到事件。

【讨论】:

  • 谢谢一百万。如果没有你的帮助,我会在泥土里挖很长时间。完美运行!
【解决方案2】:

在 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 的参数是可选的 - 如果您不使用 sendere,请不要将它们放在声明中

为了使其工作,需要使用WithEvents 关键字声明“控制”:

Public WithEvents Button1 As New Button

【讨论】:

  • 非常感谢您的快速回复。您和@jmcilhinney 是 StackOverflow 社区的功劳。
  • AddHandler 方法倾向于吸引传统的 C# 程序员(因为它非常接近 += 方法)。 Handles 方法往往会吸引老手 VB 程序员,我相信这是您在 VB6 中连接事物的方式。如果你接触 VB 一段时间,Handles 方法很快就会在你身上成长。
  • 值得注意的是,因为 C# 只有一种注册事件处理程序的方式,所以在 WinForms 设计器中创建事件处理程序将使用这种方式,但即使 AddHandler 是 VB 的等价物,在 VB 的设计器中创建事件处理程序将使用 WithEventsHandles。一般来说,在 VB 中使用 AddHandler 的唯一原因是如果您在运行时创建对象,因此无法声明字段 WithEvents 来引用它。
  • 另外值得注意的是WithEvents/Handles 跟在变量后面,而AddHandler 跟在对象后面。这意味着将新对象分配给声明为WithEvents 的字段将导致新对象处理其事件,而旧对象不再处理其事件。另一方面,使用AddHandler 会在当时引用的特定对象上注册一个事件处理程序,而不管该变量之后会发生什么。
  • @Flydog57,关于否决票,我猜你的回答实际上并没有解决所提出的具体问题,即使它可能确实解决了 OP 的根本问题有。
猜你喜欢
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 2012-04-11
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多