2013-03-19 26 views
0

根據MSDN文檔,對ShowDialog()顯示的窗體上的關閉操作應該只會導致窗體被隱藏。隨後調用ShowDialog()將取消隱藏表單。對話框做的不僅僅是隱藏自己

這似乎並非如此,確切地說。我有一個樹形視圖的表單。在對ShowDialog()的調用之間保留檢查狀態,但用戶已完成的任何節點擴展都將重置爲默認狀態。此外,Load事件也正在執行。所以它似乎不僅僅是「隱藏」表單。任何人有任何想法是什麼?

謝謝

+2

請看一些代碼吧!我敢打賭,你正在重新創建表單,而不是重新使用實例。 – 2013-03-19 13:19:15

+0

這聽起來像你已經連接不正確的事件,你可以顯示你正在報告的問題你有什麼代碼? – MethodMan 2013-03-19 13:21:38

+0

這是正常行爲。 Winforms能夠從控件中的存儲狀態重新創建本機窗口。但TreeView很難,它有太多的狀態與它相關聯。 Winforms不會嘗試保留節點的狀態。它會因此在所有節點重新創建本地窗口時再次摺疊而恢復。 – 2013-03-19 13:41:01

回答

1

我自己也經歷過這個問題。由於某種原因,在模態窗體上調用Form.Hide或設置visible = false將在至少某些情況下調用Form.Close。要解決它,我將不透明度設置爲零。您也可以使用Form.Show

如果你想象一下模態對話的行爲,它有點直觀。它阻止父窗口。所以如果你隱藏它,那麼用戶就不會有活動的窗口與之交互。 FWIW,我認爲行爲應該是父母再次活躍起來。情況並非總是如此。

+0

如果將不透明度設置爲0,那麼表單是否仍然存在並仍然捕獲事件和內容,因爲您將無法點擊它? (這是一件好奇的事......我真的不知道會發生什麼) – 2013-03-19 13:42:31

+0

@nekizalb是的。在我的特殊情況下,我有多個窗口,所以這不是一個問題。然而,取決於OP究竟做了什麼,這可能是一個需要他們做更多工作的問題(例如使用替代解決方案)。 – 2013-03-19 14:16:17