FormWindowState.Maximized的陷阱
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的重新计算,在需要的时候修改这个值,可以得到正确的结果。
症结点很坑爹。以后要更注意。