我有一個主窗體,它打開窗體A,從窗體AI可以打開窗體B,從窗體BI可以打開窗體C.問題是如果我打開窗體B,一切正常很好,但如果我也打開表單C,然後關閉表單C和B,表單A就會落後於主表單。對於形狀餘米只是創造形式的實例,然後使用.Show()
在c中失去焦點#
cNewForm form = new cNewForm();
form.Show();
我在做這爲每個表單
我有一個主窗體,它打開窗體A,從窗體AI可以打開窗體B,從窗體BI可以打開窗體C.問題是如果我打開窗體B,一切正常很好,但如果我也打開表單C,然後關閉表單C和B,表單A就會落後於主表單。對於形狀餘米只是創造形式的實例,然後使用.Show()
在c中失去焦點#
cNewForm form = new cNewForm();
form.Show();
我在做這爲每個表單
,因爲你正在使用的Show()
無參數版本,您沒有設置窗口所有權正確。您需要通過調用接收所有者參數的Show()
重載來設置所有者。或者,您可以直接設置Owner
屬性,但在撥打Show()
時,更好。
窗口所有者是一個重要的Win32概念。我建議閱讀關於這個主題的MSDN documentation。
- 一個擁有的窗口始終位於其所有者的z順序之上。
- 系統在其擁有者被銷燬時自動銷燬擁有的窗口。
- 擁有窗口在其所有者最小化時隱藏。
在你的情況我想你想形式的由主窗體所擁有,形狀B由形式的擁有,並通過形式B.
實際上問題是通過將Form Border Style設置爲Sizable來解決的,任何人都知道爲什麼? – user2029200
可能是因爲導致重新創建窗口句柄並且所有者設置正確。你描述的行爲肯定是由不正確的所有者。注意要點1.如果所有者設置正確,您的報告行爲不會發生。 –
我經常發現通過將所有者分配給Windows可以解決這些類型的問題。當顯示窗口:
FormA formA = new FormA();
formA.Show(this); // assuming this code is in the main form
'形式擁有C型.Focus()'? –
這是你的意圖,顯示窗體無模式(所以你可以隨時訪問任何形式)?或者你是否打算按照你所描述的方式堆疊它們?如果你打算把它們堆疊起來(在表單C關閉之前不能使用表單B等等),那麼你可以嘗試使用.ShowDialog()來代替。 –
您可以使用BringToFront方法來解決您的問題。是否設置了TopMost屬性的主窗口? – gustavodidomenico