【问题标题】:Handles clause requires a WithEvents variable defined in the containing type or one of its base types in VB.netHandles 子句需要在 VB.net 中包含类型或其基类型之一中定义的 WithEvents 变量
【发布时间】:2023-03-20 12:23:01
【问题描述】:

我有一个使用 Sharpdevelop 从 c# 转换而来的 VB.net 项目。当我打开项目时,我可以运行它。然后我在表单中添加了一个按钮,突然弹出 12 个错误:

Handles 子句需要在包含类型或其基类型之一中定义的 WithEvents 变量

对于看起来像这样的行:

Private Sub topListButton_Click(sender As Object, e As EventArgs) _
    Handles topListButton.Click

这是从 c# 转换而来的代码。我不确定为什么它最初运行但在我对项目进行更改后被轰炸。

我尝试删除部分行:

Handles topListButton.Click

但现在按钮点击不会触发。任何线索将不胜感激。

【问题讨论】:

  • 你有a WithEvents variable defined in the containing type吗?
  • 将“WithEvents”添加到您的按钮声明中(您可能会在设计器代码中找到它):Private WithEvents topListButton As Button
  • 谢谢。我该怎么做呢?我是否只是将 Private WithEvents topListButton 添加为按钮?
  • 没有。您查找 topListButton 定义。它已经被声明(正如我写的,可能在设计器代码中),并将关键字 WithEvents 添加到它的声明中。

标签: c# vb.net


【解决方案1】:

VB.Net 有一些奇怪的错误(或功能,取决于谁问)。
如果要使用 Handles 关键字附加事件处理程序,则必须使用 WithEvents 关键字声明引发事件的对象。
奇怪的是,无论有没有WithEvents 声明,都会引发事件,它的唯一目的是允许您使用Handles 关键字。您仍然可以使用 Add handler 语句将事件附加到处理程序。
可以看代码示例here

【讨论】:

  • WithEvents 将字段转换为在其设置器中添加和删除处理程序的属性。没有它,编译器就无法连接事件处理程序。没有什么奇怪的。
【解决方案2】:

保存topListButton_Click 方法的主体(Ctrl-C),删除整个方法,通过在WinForms 设计器中双击topListButton 重新创建它,然后再次插入主体(Ctrl-V)。

【讨论】:

    猜你喜欢
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2018-10-17
    • 2022-11-08
    • 1970-01-01
    相关资源
    最近更新 更多