我担心我的代码存在明显错误,但是我遇到了一种情况,即当我创建并显示我的表单时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
表单加载函数如下所示(但由于事件未被触发,因此实际上从未执行过。)
代码:
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
我可能会添加我正在使用一些控件和argA
对象的数据绑定,但是如果这产生错误我认为我会看到这个(我将CLR Execpetions设置设置为调试器中的Thown&gt ;例外窗口)
为什么会出现这种情况的任何想法?
答案 0 :(得分:28)
我刚遇到类似的问题(它出现在Shown
事件中,而不是Load
,但根本原因是相同的)。原因隐藏在其中一个祖先的深处 - 有一个未处理的NullReferenceException
抛出,这个异常以某种方式被“静音”。
我在用F11进行大量调试后发现了它。
但是......在写这个答案时我发现了post on SO
只需在Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
方法中添加Main()
。
如果您使用的是64位计算机,它会为您提供解决方案(在我的情况下也适用)。
答案 1 :(得分:7)
我有类似的问题。在第一次打开表单时,加载事件不会被触发,但是第二次打开时,一切都会好的。这个问题被调整为我的一个文本框,它被绑定到我从数据库中删除的字段(sql server - 我以相当标准的方式使用数据集,tableadaptors和bindingsources)。
确保表单上数据绑定的所有控件都包含数据集中存在的字段,并且数据集是底层数据库表的准确反映(最简单的方法是使用“配置”带有wizzard数据源“数据源窗口上的按钮(菜单 - 数据 - 显示数据源)”并删除表格。然后再次使用它来添加表格 - 这应该确保所有数据都匹配。
希望这有帮助。
答案 2 :(得分:4)
好的,我有同样的问题(我想),这里的线索有帮助。这是数据绑定(排序)
我将某些控件的属性绑定到设置,当我删除这些设置时,表单加载事件停止运行。删除了绑定,现在它再次运行。
答案 3 :(得分:1)
这是另一个想法。
如果将所有异常类型(不仅仅是CLR)设置为抛出而不是用户未处理,会发生什么。应用程序是否会破坏任何地方?
另外,只是要仔细检查一下,你处于调试模式吗?
答案 4 :(得分:1)
我遇到了完全相同的问题。事实证明我已经将一些ApplicationsSettings属性添加到表单TextBox控件,但后来想删除它们。我思考我已经清除了所有内容,但显然我没有 - 这也是导致Form_Load()(也许还有其他事件)无法触发的原因。删除然后重新添加有问题的TextBox就可以了。
希望这有帮助
答案 5 :(得分:1)
...解决
花了4个小时,终于从这个答案中找到了线索。 在我的情况下,我在绑定到BindingSource的表单上有几个TextBox控件与各自的列,我仍然在表单上有绑定源但发生了什么,我从底层数据库表中删除了一列,所以在表单上还有一个TextBox存在指向带有bindingsource的列,实际上没有像那样的列因为我删除了!.....这个导致Form.load事件没有触发........终于修复了..
感谢你们所有人..
答案 6 :(得分:1)
有同样的问题。检查了我的数据绑定,一切看起来都不错。不得不思考,即使表格已关闭,也许.NET不确定(过去,有时形式只是隐藏而不是真正关闭)。
我添加了事件处理程序FormClosed并在其中添加了一行:
Private Sub frmScheduleInquiry_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Me.Dispose()
End Sub
问题解决了!
答案 7 :(得分:1)
我有类似的问题,问题是数据绑定中的错误。省略数据绑定代码并尝试一下。我认为加载事件处理程序将被命中。然后看看数据绑定部分有什么问题。
答案 8 :(得分:1)
您的Windows窗体是否继承自基页?如果是这样,基页可能还有一个Form Load事件处理程序。在该基页Form Load事件处理程序中,您可能会发现正在抛出的异常。因此它退出基页表单加载事件处理程序,而不是在继承的窗体窗体中触发表单加载事件处理程序。
答案 9 :(得分:1)
您遇到的问题可能是由于应用程序需要在您执行“其他代码”之前完全加载表单。这可能是由于其他代码处理表单上尚未完成加载的对象。您可以使用在load函数中启用的计时器来执行其他代码。这样您就没有任何计时问题,您可以先加载表单,然后一瞬间,从计时器运行您想要的代码。
答案 10 :(得分:0)
我有类似的问题。事实证明我没有在表单上使用Show方法 - 而是使用user32.dll ShowWindow调用。这意味着表单仍然出现,但Load事件从未被触发,因为从未调用过dotNet Show方法。
答案 11 :(得分:0)
不确定这是否会有所帮助,但我刚遇到这个问题,因为有人错误地删除了Handles Me.Load。我看到你显示MyBase.Load尝试将其更改为Me.Load。
答案 12 :(得分:0)
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
如果出现消息框,则表示在初始化参数之前触发了该事件。它还会解释关闭/打开表格的“奇怪”行为。
您是否尝试在“已显示”事件中运行argA操作?
答案 13 :(得分:0)
我知道这是一篇旧帖子,但我认为如果有人在搜索此问题,我对此问题的修复可能有所帮助。
我遇到了最初发布的问题中所述的相同问题,但我在表单上没有任何数据绑定字段。我发现问题在于我使用的是CurrentDeployment.CurrentVersion
方法,这导致了无声问题。我将应用程序从调试模式设置为发布,问题仍然存在。通过反复试验,我说出了定义方法Dim xVersion As Version = ApplicationDeployment.CurrentDeployment.CurrentVersion
和presto ...它现在像往常一样工作。
我最后更改了以下代码的原始代码。
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
我希望这有助于某人。 快乐的编码...
答案 14 :(得分:0)
同样的问题,我重写了设计师并修复了它。设计师正在加载然后崩溃(当然是默默地),并且form_load因此没有被解雇。
答案 15 :(得分:0)
有同样的问题,但原因完全不同。 使用form.Show()而不是form.ShowDialog()
显示表单答案 16 :(得分:0)
在构建和运行.NET 4.0 WinForms应用程序时,我遇到了这种症状,该应用程序加载了一系列较旧的程序集(.NET 2.0; .NET 1.1)。
过去,我已经看到这会导致混合模式程序集异常。在这种情况下,主窗体将无例外地加载,并且不会执行其任何窗体加载代码。
就我而言,解决方案是在App.config文档中设置useLegacyV2RuntimeActivationPolicy="true"
。
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
答案 17 :(得分:0)
确保IDE顶部的“解决方案配置”框显示“调试”。 我发现,如果显示“ Release”,则调试器未捕获“ Load”方法。
答案 18 :(得分:0)
在我的情况下,主窗体在设计器中设置了 WindowState:Maximized 。这导致窗口在Load事件触发之前在屏幕上绘制。