我有一个MDI主窗体。在它上面,我托管一个表单,我希望它在关闭之前显示一个消息框(询问用户是否保存更改)。如何防止MDI主窗体关闭MDI子项
到目前为止很好,但是我发现关闭MDI主窗体不会引发MDI子FormClosing事件。我想我会在MDI main的FormClosing事件中调用MdiChild。Close()(它会得到提升)。这接缝工作,但它确实造成问题...
在我显示的消息框中,我提供用户保存更改,不保存更改并取消关闭。通常这工作正常,但我似乎无法找到一种方法来取消MDI主的FormClosing事件。有没有一个这样做的优雅方式?
编辑:我解决了这个问题,通过抛出异常(当用户决定取消关闭过程时),它在MDI main的FormClosing事件中被捕获。通过这种方式,我知道什么时候我必须取消MDI主窗体的FormClosing事件,并且这种接缝工作正常......但我简直不敢相信这个“hax”是这样做的唯一方式。当然有更好的方法?
不,不要这样做,因为您可能希望在用户在“保存更改”提示中点击取消时立即停止。您不希望用户必须在此处循环查看每个表单,并且此代码执行此操作。相反,在调用Close()之后,请检查frm.IsDisposed。如果它是错误的,表单由于某种原因无法关闭,您应该设置e.Cancel = true并从您的foreach循环中断开。这样一旦用户点击取消,整个操作就会停止。 – 2013-08-26 16:30:43