2009-08-11 49 views
1

我有一个具有多个窗体的项目,例如,窗体A打开窗体B时会打开窗体C,然后窗体C关闭,窗体B和窗体A也会回到窗体的背面,这样任何其他程序都可以在项目的其他表格前显示出来。.net窗口订单

为什么会发生这种情况,以及如何确保在另一个窗体关闭时显示上次打开的窗体?

回答

3

确保您,或者明确设置属性或通过将所有者作为参数传递给Show()ShowDialog()设置的由其他控件或形式开口形式Owner财产。

1

您可以跟踪每个表单中的“最后”表单,然后关闭并激活它。即:如果表格B打开表格C,则表格C可以保留对表格B(或关闭时激活的任何表格)的引用,并且在关闭表格时将其强制到前台。这就是说,我个人认为,让操作系统执行正常的窗口操作/处理通常会更好,除非有特定的理由来覆盖它。迫使他们的Windows进入最前沿的应用程序经常让我感到烦恼 - 而不是有益的,它可能会对用户造成破坏。

+0

这不是我想扰乱流程,而是我的程序本身就是被破坏的程序。在关闭表格C之后,最上面的表格应该是打开表格B的表格。即使另一个程序在两者之间未被展开,当表格C关闭时,其他程序也会被购买到表格B上方的前面。 – Totty 2009-08-11 15:27:34

+0

然后,我写的第一段应该可以正常工作 - 只要在关闭/隐藏前面的窗体时激活其他窗体即可。这可以是一个单独的Form属性,如果它不为null,则可以激活。 – 2009-08-11 15:29:59

+0

尽管在表单的所有者属性中已经有了一个完成此操作的机制。 – 2009-08-11 16:10:00

0

您可以按顺序从单个窗体打开一系列对话框窗体。你可以做的是检查DialogResult - 然后你就可以控制打开新窗体或显示旧窗体的方向。

如果您担心如此多形式的z顺序,您可能会考虑更改UI以避免多个非模态窗口。

0

嗯,也许你需要设置新的窗体作为一个模式对话框,拥有旧窗体的所有权。这样当新窗体关闭时,新窗体将可见。此外,只要新表格处于打开状态,任何人都无法访问旧表格。