MDI父窗體下面有很多子窗體。子窗體打開時都是以FormWindowState.Maximized的屬性打開的,但是結果部分如意,部分奇怪。
先貼上單實例的代碼:
static TestForm _singleTon; public static void ShowSingleTon(FormWindowState windowState = FormWindowState.Maximized, Form parent = null) { if (_singleTon == null || _singleTon.IsDisposed) _singleTon = new ProductSetting(count); if (parent != null)//設置父窗口,以及對代理賦值 { _singleTon.MdiParent = parent; } if (_singleTon.WindowState != windowState) _singleTon.WindowState = windowState; if (Setting.SetFrontWindow != null && _singleTon.IsHandleCreated) Setting.SetFrontWindow(_singleTon.Handle); _singleTon.Show(); }
如此,調用TestForm.ShowSingleTon就能顯示出單實例的窗口了。
但是同樣的單實例實現邏輯,幾個窗口最大化的效果卻不一樣,一部分的確是最大化的,另一部分子窗口是初始化的大小,雖然最小化和關閉的按鈕是正常。

對比幾個窗口的其余的代碼,發現出問題的窗口在窗口設計界面,就設置了FormWindowState.Maximized

而正常顯示的窗口這里是默認Normal值。
將窗口的maximized還原成Normal之后,問題解決了。
這里只能猜測,WindowState的屬性值在修改時會觸發窗口Size的重新計算,在需要的時候修改這個值,可以得到正確的結果。
症結點很坑爹。以后要更注意。
