首页 > 代码库 > FormWindowState.Maximized的陷阱

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的重新计算,在需要的时候修改这个值,可以得到正确的结果。

症结点很坑爹。以后要更注意。

FormWindowState.Maximized的陷阱