2011-12-14 47 views
2

在這個WinForms項目中,我有一個彈出2秒的特定信息窗體(InfoForm),然後消失。我這樣做的方式是通過調用消失的模態形式之謎

infoForm.Show(); 

,然後裏面InfoForm我有一個Timer 2秒後蜱,並呼籲Close()

現在,有時候還有另一種形式ErrorForm我需要以模態方式顯示(使用errorForm.ShowDialog()),通知用戶發生了錯誤,並且他們需要單擊確定,然後才能繼續。這可能發生在InfoForm正在打開和關閉時,並且一個不應該影響另一個。

但它的確如此。

我有這麼走得更遠,把一個斷點調用ShowDialog,如果InfoForm是在我遇到斷點時打開,然後當我點擊「單步跳過」,而不是彈出的ErrorForm並等待我點擊「確定」,調試器會跳過該行並已經在下一行,就好像表單從未打開過一樣。同時在後臺InfoForm已關閉,因此如果我將執行點重置爲調用ErrorForm.ShowDialog(),然後「跳過」,則表單將按預期顯示,並等待我單擊「確定」,然後再轉到下一步聲明。

刪除斷點和寫入調試日誌證實了我的懷疑,它的關閉,是造成我ErrorForm是不合時宜的InfoForm收盤:

螺紋09 - 2011/12/14 16時39分: 30.574 - 顯示信息的形式

螺紋09 - 16 2011/12/14:39:31.300 - ErrorForm.ShowDialog

之前

螺紋09 - 16 2011/12/14:39:32.584 - 計時器滴答

螺紋09 - 16 2011/12/14:39:32.585 - 信息形成閉合

螺紋09 - 16 2011/12/14:39:32.593 - 錯誤形式收盤

螺紋09 - 2011/12/14 16:39:32.593 - After ErrorForm.ShowDialog

爲什麼會發生這種情況,治癒的方法是什麼?

+0

你確定你沒有交叉鏈接一個事件?把它重新制作成一個小的(新的)項目,當你真的有東西的時候再把它放在這裏。 –

回答

6

您應該通過MainForm作爲所有者到ErrorForm.ShowDialog()

+0

的確,ErrorForm的所有者被傳遞爲null,但即便如此,爲什麼ErrorForm在InfoForm執行時關閉?傳遞一個空主人是否僅僅讓新的表單假定最後打開的表單是它的所有者? –

+0

@Shaul - 是的,從沒有參數的ShowDialog文檔:「將窗體顯示爲模式對話框,並將當前活動窗口設置爲其所有者。」 – Henrik