1. 程式人生 > 實用技巧 >【C#】DockPanelSuite 中 DockState.Document 狀態下子窗體控制元件不顯示的解決方案

【C#】DockPanelSuite 中 DockState.Document 狀態下子窗體控制元件不顯示的解決方案

DockPanelSuite 是 Winform 中優秀的佈局控制元件,但是這次使用過程中卻出了個問題。

我遇到的問題是這樣的,主窗體是通過 ShowDialog 顯示的,子窗體的停靠狀態為 DockState.Document,主窗體關閉時,並未真正 Close,僅是 Hide

然後問題來了

問題1:在主窗體 Load 事件中直接 Show 子窗體,關閉主窗體後再次開啟,報錯 建立視窗控制代碼時出錯。

這個問題臨時處理,改為不在 Load 事件中預設開啟子窗體。

問題2:開啟子窗體後關閉主窗體,再次開啟主窗體(注意:子窗體並未關閉),這時候,子窗體內的所有控制元件不顯示。這個問題困擾了我很久,一直找不到解決方案,後來再跟同事說起這個 bug 的時候忽然就想到了。

首先,子窗體中控制元件不顯示,但是關閉子窗體後再開啟,控制元件是正常顯示的。於是我就想到,是不是要在主窗體顯示完畢後再開啟子窗體,就不會有這個問題了呢?
我先將顯示子窗體的方法,從 Load 事件中移動到 Shown 事件中,結果第一個問題解決了,第二個問題依然存在。

然後我想到的是,在關閉主窗體時,移除子窗體。因為主窗體顯示後,點選按鈕開啟子窗體,是沒有問題的,那麼我就想模擬出這個流程。結果,失敗了。問題依舊存在。

我確定,只有在 State = DockState.Document 時才會有這個 bug,我就在關閉主窗體時,將子窗體的 State 屬性改成了 DockState.DockLeft

,事實證明有效果,子窗體控制元件顯示正常,雖然佈局有點問題,但最主要的問題解決了,一切就好辦了。最後,我在主窗體關閉時,將子窗體的 State 設成了 DockState.Hidden。至此 BUG 完美解決。