我有一個具有多個窗體的項目,例如,窗體A打開窗體B時會打開窗體C,然後窗體C關閉,窗體B和窗體A也會回到窗體的背面,這樣任何其他程序都可以在項目的其他表格前顯示出來。.net窗口訂單
爲什麼會發生這種情況,以及如何確保在另一個窗體關閉時顯示上次打開的窗體?
我有一個具有多個窗體的項目,例如,窗體A打開窗體B時會打開窗體C,然後窗體C關閉,窗體B和窗體A也會回到窗體的背面,這樣任何其他程序都可以在項目的其他表格前顯示出來。.net窗口訂單
爲什麼會發生這種情況,以及如何確保在另一個窗體關閉時顯示上次打開的窗體?
確保您,或者明確設置屬性或通過將所有者作爲參數傳遞給Show()
或ShowDialog()
設置的由其他控件或形式開口形式Owner
財產。
您可以跟蹤每個表單中的「最後」表單,然後關閉並激活它。即:如果表格B打開表格C,則表格C可以保留對錶格B(或關閉時激活的任何表格)的引用,並且在關閉表格時將其強制到前臺。這就是說,我個人認爲,讓操作系統執行正常的窗口操作/處理通常會更好,除非有特定的理由來覆蓋它。迫使他們的Windows進入最前沿的應用程序經常讓我感到煩惱 - 而不是有益的,它可能會對用戶造成破壞。
您可以按順序從單個窗體打開一系列對話框窗體。你可以做的是檢查DialogResult - 然後你就可以控制打開新窗體或顯示舊窗體的方向。
如果您擔心如此多形式的z順序,您可能會考慮更改UI以避免多個非模態窗口。
嗯,也許你需要設置新的窗體作爲一個模式對話框,擁有舊窗體的所有權。這樣當新窗體關閉時,新窗體將可見。此外,只要新表格處於打開狀態,任何人都無法訪問舊錶格。
這不是我想擾亂流程,而是我的程序本身就是被破壞的程序。在關閉表格C之後,最上面的表格應該是打開表格B的表格。即使另一個程序在兩者之間未被展開,當表格C關閉時,其他程序也會被購買到表格B上方的前面。 – Totty 2009-08-11 15:27:34
然後,我寫的第一段應該可以正常工作 - 只要在關閉/隱藏前面的窗體時激活其他窗體即可。這可以是一個單獨的Form屬性,如果它不爲null,則可以激活。 – 2009-08-11 15:29:59
儘管在表單的所有者屬性中已經有了一個完成此操作的機制。 – 2009-08-11 16:10:00