【发布时间】:2015-09-09 00:39:35
【问题描述】:
我有一个我一直在开发的程序,它在关闭表单时突然开始抛出错误。
通常,当您调试软件时,如果它抛出这些错误之一,您会被带到代码中,您可以找到问题所在,但是由于某种原因,此错误确实会在调试器中显示,通过单步执行代码 i已设法将其范围缩小到它在关闭窗体上调用 base.Dispose() 时,并且仅当它以特定顺序关闭时。
我有一个主表单,每次用户单击连接时都会填充 Mdichildren 表单,它会处理所有表单并将它们重新创建为选项卡
这一直运行良好,但现在突然之间开始出现 NRE。
System.NullReferenceException: Object reference not set to an instance of an object.
at System.Windows.Forms.Form.DeactivateMdiChild()
at System.Windows.Forms.Form.WmMdiActivate(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg , IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
at System.Windows.Forms.Control.DefWndProc(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.MdiClient.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
我可以看到它与 Mdi 子表单停用有关,我已经检查了父表单设置是否正确,现在经过大量谷歌搜索后丢失了。
以下代码启动的形式。
public void CheckIfExisits(Form MainForm, string DBASE, string ODBC, UltraToolbarsManager UTBM)
{
var ASQL = new Accounts.SQL.SummaryTab();
var FSQL = new FocalPoint.SQL.SummaryTab();
var WSQL = new WorkFlowForms.SQL.SummaryTab();
var AVER = ASQL.DimVer(DBASE, ODBC);
var FVER = FSQL.FPVer(DBASE, ODBC);
var WVER = WSQL.WffVer(DBASE, ODBC);
if (AVER != "0")
{
var FrmAccSum = new FrmAccountsSummary(DBASE, ODBC, UTBM) { MdiParent = MainForm };
FrmAccSum.Show();
}
if (FVER != "0")
{
var FrmFPSum = new FrmFocalPointSummaryNew(DBASE, ODBC, UTBM) { MdiParent = MainForm };
FrmFPSum.Show();
}
if (WVER != "0")
{
var FrmWFFSum = new FrmWorkFlowFormSummarys(DBASE, ODBC, UTBM) { MdiParent = MainForm };
FrmWFFSum.Show();
}
}
如果我以与打开表单相反的顺序关闭表单,它工作正常,但是如果我尝试关闭 Accounts 表单然后是 Focalpoint 表单,我会收到 NRE 错误。
我可以提供关闭表单的代码,但是因为我可以通过手动关闭表单来复制它,所以我认为这不是问题所在。
我的主窗体调用类如下
SummaryFormLaunch SFL = new SummaryFormLaunch();
SFL.CheckIfExisits(this, cmbDBASE.Text, cmbODBC.Text, ultraToolbarsManager1);
欢迎任何有关尝试追查错误原因的建议,因为我不知所措。
干杯!
编辑:使用 VS 2008,.net 3.5SP1
编辑 2:还将补充说,如果我在例外列表中打开 NRE 抛出,我仍然不会被带到手头的错误,只是在一个框中给我 NRE 错误,不会把我带到部分代码。
编辑 3:每当我首先关闭帐户表单(创建的第一个 mdi 子项)时,这似乎都会发生,如果我将其留到最后,它似乎工作正常,但是如果我先关闭它,无论最后关闭的表单是什么都会导致 NRE。
【问题讨论】:
-
@SonerGönül 我会看一下主要问题是因为这是在 Base.Dispose 上,实际上只有 2 个变量可见。表单(正确)和设置为 true 的处置标志,因此从这个意义上说没有空值,它似乎是 base.dispose 方法中的某些东西,您无法进入并找到它掉落的确切点
标签: c# .net visual-studio-2008 .net-3.5 infragistics