情态形式消失的奥秘

本文关键字:奥秘 消失 | 更新日期: 2023-09-27 18:18:03

在这个WinForms项目中,我有一个特定的信息表单(InfoForm),它弹出2秒,然后消失。我的方法是调用

infoForm.Show();

然后在InfoForm中,我有一个Timer,在2秒后滴答并调用Close()

现在,有时有另一个形式ErrorForm我需要显示模态(使用errorForm.ShowDialog()),通知用户发生了错误,他们需要点击OK才能继续。这可能发生在InfoForm打开和关闭时,一个不应该影响另一个。

但是它有。

我已经走了这么远,把一个断点调用到ShowDialog,如果InfoForm是打开的时候,我打了断点,然后当我点击"跨一步",而不是弹出ErrorForm,等待我点击"ok",调试器只是步过行,已经在下一行,好像窗体从未打开。同时,在后台InfoForm已经关闭,所以如果我将执行点重置为对ErrorForm.ShowDialog()的调用,然后"Step over",表单就会出现,并等待我点击"ok"。

删除断点并写入调试日志证实了我的怀疑,这是InfoForm的关闭导致我的ErrorForm过早关闭:

线程09 - 2011/12/14 16:39:30.574 -信息形式显示

线程09 - 2011/12/14 16:39:31 300 -之前的ErrorForm。ShowDialog

线程09 - 2011/12/14 16:39:32.584 -计时器滴答

线程09 - 2011/12/14 16:39:32.585 -信息形式关闭

线程09 - 2011/12/14 16:39:32.593 -表单关闭错误

线程09 - 2011/12/14 16:39:32.593 -后ErrorForm。ShowDialog

为什么会发生这种情况,治疗方法是什么?

情态形式消失的奥秘

您应该将MainForm作为所有者传递给ErrorForm.ShowDialog()