Vb.net 窗体。加载事件未触发,窗体显示

Vb.net 窗体。加载事件未触发,窗体显示,vb.net,winforms,events,event-handling,Vb.net,Winforms,Events,Event Handling,我担心我的代码显然有问题,但我遇到了这样一种情况,即当我创建和显示表单时,Form.Load事件没有触发 表单不是子类化的(正如我在一些搜索中看到的那样),当我在调试器中单步执行代码时,不会出现任何错误 我在IDE创建的表单加载函数上设置了一个断点(该函数有Handles MyBase.load签名后缀),但从未到达断点,表单确实显示并工作 表单在构造函数中被传递了三个参数,但是在执行任何其他操作之前调用了initializeComponent()函数 代码: 表单加载函数如下所示(但由于未触发

我担心我的代码显然有问题,但我遇到了这样一种情况,即当我创建和显示表单时,
Form.Load
事件没有触发

表单不是子类化的(正如我在一些搜索中看到的那样),当我在调试器中单步执行代码时,不会出现任何错误

我在IDE创建的表单加载函数上设置了一个断点(该函数有
Handles MyBase.load
签名后缀),但从未到达断点,表单确实显示并工作

表单在构造函数中被传递了三个参数,但是在执行任何其他操作之前调用了
initializeComponent()
函数

代码:

表单加载函数如下所示(但由于未触发事件,因此不会实际执行该函数)

代码:

我可能会补充说,我正在对一些控件和
argA
对象使用一些数据绑定,但如果这产生错误,我想我会看到这一点(我在debugger>exceptions窗口中将CLR Executions设置设置为Thown)


您知道为什么会发生这种情况吗?

您遇到的问题可能是由于应用程序需要在执行“其他代码”之前完全加载表单。这可能是由于其他代码处理表单上尚未完成加载的对象。您可以使用在load函数中启用的计时器来执行其他代码。这样,您就不会有任何计时问题,您可以先加载表单,然后在一瞬间从计时器中运行所需的代码。

这里是另一个想法

如果将所有异常类型(不仅仅是CLR)设置为抛出而不是用户未处理,会发生什么。应用程序是否有任何漏洞


另外,请仔细检查,您处于调试模式,对吗?

马特在这一点上可能是正确的。您是否尝试过这样调整代码:

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
Else
      MessageBox.Show("argA has not been set")
End If
End Sub
如果出现messagebox,则表示事件是在参数初始化之前触发的。它还可以解释有关关闭/打开表单的“奇怪”行为


您是否尝试过在“显示”事件中运行argA操作?

您的windows窗体是否继承自基本页?如果是这样,则基本页可能还具有表单加载事件处理程序。在该基页表单加载事件处理程序中,您可能会发现正在抛出的异常。因此,它正在退出基本页表单加载事件处理程序,而不是在继承的windows表单中启动表单加载事件处理程序。

不确定这是否有帮助,但我遇到了这个问题,因为有人错误地删除了句柄Me.load。我看到你在显示MyBase。加载尝试将其更改为我。加载

我也有类似的问题,问题是数据绑定中的错误。省略用于数据绑定的代码并尝试一下。我认为加载事件处理程序将被命中。然后看看数据绑定部分出了什么问题。

好的,我也有同样的问题(我想),这里的线索也有帮助。这是数据绑定(有点)


我将一些控件的属性绑定到设置,当我删除这些设置时,表单加载事件停止运行。删除了绑定,现在它又开始运行了。

我刚刚遇到了一个类似的问题(它出现在
显示的
事件中,不是
加载
,但根本原因是相同的)。原因隐藏在一个祖先的内心深处——抛出了一个未经处理的
NullReferenceException
,该异常以某种方式被“静音”

我用F11进行了大量调试后发现了它

但是。。。在写这个答案时,我发现了这个

只需在
Main()方法中添加
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)


如果您使用的是64位机器,它会为您提供解决方案(在我的情况下也可以)。事实证明,我并没有在表单上使用Show方法,而是使用了user32.dll ShowWindow调用。这意味着表单仍然出现,但由于从未调用dotNet Show方法,因此从未触发加载事件。

我遇到了类似的问题。第一次打开表单时,不会触发加载事件,但第二次打开时,一切都会正常。问题出在我的一个文本框上,该文本框绑定到我从数据库中删除的一个字段(sql server-我以相当标准的方式使用数据集、TableAdapter和bindingsources)

确保窗体上所有数据绑定的控件都有数据集中存在的字段,并且数据集准确反映了基础数据库表(最简单的方法是使用“数据源”窗口(菜单-数据-显示数据源)上的“使用wizzard配置数据源”按钮来完成最后一步操作)然后再次使用它将表添加回-这应该确保所有数据都匹配


希望这有帮助。

也有同样的问题。检查了我的数据绑定后,一切看起来都正常。开始思考,即使表单已关闭,可能.NET也不确定(过去,有时候表单只是隐藏的,而不是真正关闭的)

我添加了事件处理程序FormClosed,并在其中放了一行:

Private Sub frmScheduleInquiry_FormClosed(sender As Object, e As   System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    Me.Dispose()
End Sub
问题解决了!

问题解决了

花了4个小时,终于从这些答案中找到了线索。 在我的例子中,表单上有两个TextBox控件绑定到一个具有相应列的BindingSource,表单上仍然有该BindingSource,但发生的情况是,我从基础数据库表中删除了一列,因此表单上仍然有一个TextBox存在,指向具有BindingSource的列,实际上没有列umn是这样的,因为我删除了!…此lead Form.load事件没有触发…最终修复


感谢你们所有人。

我知道这是一篇老文章,但我想如果有人
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
Else
      MessageBox.Show("argA has not been set")
End If
End Sub
Private Sub frmScheduleInquiry_FormClosed(sender As Object, e As   System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    Me.Dispose()
End Sub
    Dim xVersion As Version = ApplicationDeployment.CurrentDeployment.CurrentVersion
    sysVersion = String.Format("{0}.{1}{2}.{3}", xVersion.Major, xVersion.Minor, xVersion.Build, xVersion.Revision)
#If (DEBUG) Then
    sysVersion = "[Debug mode]"
#Else
    Dim xVersion As Version = ApplicationDeployment.CurrentDeployment.CurrentVersion
    sysVersion = String.Format("{0}.{1}{2}.{3}", xVersion.Major, xVersion.Minor, xVersion.Build, xVersion.Revision)
#End If
<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>