Form.Load事件未触发,表单显示

Chr*_*sAU 16 vb.net events event-handling winforms

我担心我的代码有明显的错误,但我遇到的情况Form.Load是,当我创建并显示我的表单时,事件不会触发.

表单不是子类(因为我在一些搜索中看到了一些问题),并且当我逐步调试调试器中的代码时,我没有收到任何错误.

我在IDE创建的表单加载函数(具有Handles MyBase.Load签名后缀)上设置了断点,但是从未到达断点并且表单显示并正常工作.

表单在构造IntializeComponent()函数中传递三个参数,但在完成任何其他操作之前调用该函数.

码:

Public Sub New(ByVal argA As Object, ByVal argB As Object, ByVal mode As FormMode)

    ' This call is required by the Windows Form Designer.
    InitializeComponent()

    ' Other code here,
    ' No errors generated
    '

End Sub
Run Code Online (Sandbox Code Playgroud)

表单加载函数如下所示(但实际上从未执行过,因为事件未被触发).

码:

Private Sub frmInstrumentEditor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If Not argA Is Nothing Then ' argA set in constructor
          ' Operations using argA
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

我可能会添加我正在使用一些控件和argA对象的数据绑定,但如果这产生错误我认为我会看到这个(我已将CLR Execpetions设置设置为在调试器>例外窗口中显示)

有什么想法可能会发生吗?

Mar*_*čič 28

我只是遇到了类似的问题(事实上Shown,不是Load,但根本原因是相同的).原因隐藏在其中一个祖先的深处 - 有一个未处理的NullReferenceException抛出,这个例外以某种方式"静音".

经过F11的大量调试后我发现了它.

但是......在写这个答案的时候,我发现了这个帖子

只需添加Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)您的Main()方法.

如果您使用的是64位计算机,它会为您提供解决方案(在我的情况下也适用).


小智 7

我遇到了类似的问题.在第一次打开表单时,加载事件不会被触发,但是第二次打开它时,一切都会很好.这个问题被调整为我的一个文本框,它被绑定到我从数据库中删除的字段(sql server - 我以相当标准的方式使用数据集,tableadaptors和bindingsources).

确保表单上数据绑定的所有控件都包含数据集中存在的字段,并且数据集是对基础数据库表的准确反映(最简单的方法是使用"配置数据源" wizzard"数据源窗口上的按钮(菜单 - 数据 - 显示数据源)并删除表.然后再次使用它来添加表 - 这应该确保所有数据匹配.

希望这可以帮助.