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

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

原文地址:https://www.cnblogs.com/icyJ/p/Maximized.html