2010-05-21 86 views
0

我有主窗體和一些其他窗體,可以顯示控件,放置在主窗體上,使用ShowDialog(控件)。另外我在主窗體上有事件處理程序,可以隨時處理。我怎樣才能在裏面檢查,有沒有其他的對話框形式?檢查窗體的子窗體 - C#

回答

0

如果我正確理解你的問題,我建議你檢查每個窗體的form.visible。

This可以幫助你

+0

但我不能獲得積極的形式,並將其與主?它會解決我的問題。 – fadimko 2010-05-21 05:26:19

+0

檢查更新的答案。 – Ram 2010-05-21 05:46:46

+0

我下次會看完男人,謝謝 – fadimko 2010-05-21 06:01:04

0

如果我正確理解你,你問是否在你的主窗體的事件處理程序中,你可以檢查是否有任何其他窗體是打開的。

如果您使用ShowDialog顯示這些表單,那麼您的主窗體的線程將被阻止,直到新窗體關閉。我相信在此期間發生的任何事件都會等待,並在表格結束後予以處理。

如果您使用Show顯示這些表單,那麼您需要保留一些對錶單的引用,以便在您的事件處理程序中檢查它們。

如果你的問題更清楚一點,或許我可以幫到更多。

+0

對不起,我有一些英語問題。 我的事件處理程序處理來自另一個靜態類的事件(我的應用程序是多線程的,我使用這個靜態類作爲共享內存)。所以它可以隨時調用,就像簡單的方法一樣。或者可能是我錯了? – fadimko 2010-05-21 04:54:07

+0

如果你是多線程的,那麼我相信這是可能的,正如你所描述的那樣。像Ram說的,你可以使用'form.visible'。確保你有正確的線程安全預防措施,並確保將表單的實例保存在你可以在你的處理程序中訪問的地方。也就是說,如果你只是調用'(new MyDialog())。ShowDialog()'你將無法在稍後檢查它的可見性。 – dlras2 2010-05-21 17:09:43

+0

不,dlras2,主窗體的線程沒有被阻塞。在子窗體關閉之前,ShowDialog調用不會返回,但線程仍在處理事件(即Windows消息處理正在運行)。在子窗體中觸發的任何事件都可能導致主窗體中的代碼運行。無論應用程序是否爲多線程,情況都是如此。例如:子表單有一個引發公共事件的按鈕。主窗體爲該事件附加一個處理程序。現在,無論何時單擊按鈕,即使在可見子項時,也會執行主窗體的處理程序。 – ricovox 2014-05-29 19:13:03

0

你可能想看看Application.OpenForms。你可以看看收藏。

+0

謝謝。我忘了查看應用程序屬性。 – fadimko 2010-05-21 05:45:14