2017-04-20 121 views
-1

我有一個模態窗體,它將執行一些長操作,在該操作期間,用戶想要最小化模態窗體並在主窗體和進度欄中執行一些其他活動模態形式顯示在主窗體狀態欄中最小化子模態窗體而不會最小化主窗體並恢復子模態窗體

當用戶點擊狀態欄時,模態窗體應該出現給用戶。

綜述:

  1. 我們主要的Winform和兒童莫代爾WinForm的
  2. 兒童模式窗體具有通過進度條
  3. 如果用戶最小化的子窗體顯示出一些長時間操作。它完全最小化主要從
  4. 但用戶要

我嘗試了兩種方法

  • 隱藏模式從儘量減少事件減少僅子窗體和主要形式做一些操作。兒童形式被隱藏 然後我無法恢復子表單實例顯示它從 背面的主形式,因爲模態形式的對象是使用(Form1中reportForm =新Form1中(DBConnection的)) { 設置

    reportForm.ShowDialog(); }

  • 如果我做模態形式的最小化它也最小化主窗體。 在一個stackoverflow中提到模態形式最小化然後主窗體也會最小化主窗體,這是設計正確的行爲。

請給我一個解決這個問題的方法。

+0

你說的是什麼沒有做出很大的意義。顯示一些代碼,我們不編碼猴子 – EpicKip

+0

答案很明顯。不要製作第二個窗體模式 – Pikoh

+0

對話框會禁用應用程序中的所有其他窗口。所以如果你把它最小化,那麼就沒有其他的窗口可以與用戶交互了。 OS對這個可用性問題做了一些事情,它也將其他窗口最小化。如果你想實現這個需求,你根本不能使用ShowDialog()。請小心不要讓用戶再次開始相同的操作。正常的用戶界面是狀態欄中的進度條,只有在後臺操作處於活動狀態時纔會顯示。 –

回答

0

模態表單的整點是用戶不能在父窗體中做其他事情。

假設你的長期運行的操作依賴於輸入從模式窗體,你應該這樣做:

  1. 保持形態模式
  2. 移動長時間操作成一個BackgroundWorker
  3. 開始在關閉後臺工作的模式形式
  4. 打開新的非模態形式以顯示來自後臺工作者的進度。
+0

感謝您的回答。我是否需要保持主窗體中的背景工作? – kalidoss

+0

@kalidoss是的。在這種情況下,背景工作者應該是主要的形式。 – Kempeth