2017-06-20 89 views
0

就像標題所說的,我運行form.ShowDialog(parentForm),其中parentForm是一個有效的IWin32Window繼承窗體,打開的窗口阻止訪問父窗體(如預期),但阻止訪問我的主窗體。將有效的所有者傳遞給Form.ShowDialog()時,新窗體在所有當前打開的窗體上模態

我可以看到的唯一原因是主窗體和父窗體與顯示的對話框在同一個線程上。有沒有可能的原因可能發生?而且,如果問題是由於共享線程造成的,有沒有辦法解決它,而無需在單獨的線程上打開對話框?

+0

主窗體和parentForm如何關聯?他們之間是否存在所有者/所有者或父母/子女關係?如果是這樣,什麼? –

+1

這是模態對話框在Windows中的工作原理(所有者與被阻止的內容無關)。既可以在同一個線程上顯示爲非模式,也可以在單獨的線程上顯示模式(只是不確定是否可以在後面的情況下使用另一個線程的所有者)。 –

+1

你有責任讓自己陷入一大堆麻煩中。如果你不喜歡ShowDialog()做什麼,那麼就不要使用它,而是使用Show(),並使用FormClosing事件來知道窗口即將消失。但請務必理解*爲什麼* ShowDialog存在以及它可能避免的錯誤。重入錯誤與線程錯誤一樣令人討厭。 [閱讀本文](https://stackoverflow.com/a/5183623/17034)。 –

回答

0

如果我理解正確的話,你想在同一時間訪問這兩個父母和孩子的形式,

將機器人可以訪問父窗體如果您使用ShowDialog()

使用form.Show(parentForm)代替form.ShowDialog(parentForm)

相關問題