You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET跨窗体RaiseEvent触发事件Form2不生效问题求解

问题说明

实现目标为在Form1中声明自定义事件,在Form2中响应该事件,现有代码运行后Form2始终无法触发事件响应逻辑。

原有Form1实现代码

Public Class Form1

    Private Sub btnOpenForm2_Click(sender As Object, e As EventArgs) Handles btnOpenForm2.Click
        Form2.Show()
    End Sub

    Public Event show_My_Message()
    Private Sub btnShowMessageOnForm2_Click(sender As Object, e As EventArgs) Handles btnShowMessageOnForm2.Click
        RaiseEvent show_My_Message()
    End Sub

End Class

原有Form2实现代码

Public Class Form2

    Public WithEvents My_Form1 As Form1 = New Form1
    Private Sub Show_My_Message_On_Form2() Handles My_Form1.show_My_Message
        MsgBox("Hello")
    End Sub

End Class
问题原因

核心错误是事件订阅对象和事件触发对象不是同一个Form1实例:
Form2中通过WithEvents绑定事件的My_Form1是代码里手动New出来的独立Form1实例,这个实例从未被显示、也不会被用户操作;用户实际看到、点击按钮触发事件的是程序启动时创建的那个Form1实例,Form2根本没有订阅这个实例的事件,自然无法收到事件通知。

修复方案

按以下步骤调整代码即可:

  • 移除Form2中My_Form1声明后的New Form1初始化逻辑,仅保留带事件绑定能力的变量声明
  • 打开Form2时,将当前运行的Form1实例(用Me关键字指代当前窗体自身)赋值给Form2的My_Form1变量,保证事件订阅指向正确的实例
  • 显式创建Form2实例后再完成传值、显示操作,不要直接使用VB.NET提供的默认窗体实例,避免出现实例不匹配的隐性问题

修复后的Form1代码

Public Class Form1

    Private Sub btnOpenForm2_Click(sender As Object, e As EventArgs) Handles btnOpenForm2.Click
        ' 显式创建Form2实例
        Dim frm2 As New Form2()
        ' 将当前Form1实例传给Form2,绑定事件订阅关系
        frm2.My_Form1 = Me
        frm2.Show()
    End Sub

    Public Event show_My_Message()
    Private Sub btnShowMessageOnForm2_Click(sender As Object, e As EventArgs) Handles btnShowMessageOnForm2.Click
        RaiseEvent show_My_Message()
    End Sub

End Class

修复后的Form2代码

Public Class Form2
    ' 仅声明带WithEvents的变量,不在这里创建新的Form1实例
    Public WithEvents My_Form1 As Form1
    Private Sub Show_My_Message_On_Form2() Handles My_Form1.show_My_Message
        MsgBox("Hello")
    End Sub
End Class

内容的提问来源于stack exchange,提问作者Imad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:18:25