2017-02-16 37 views
0

我正在使用此代码之间正常(具有较大的边框样式)和最大化(具有无边框样式)的WindowState之间切换。Winform客户端大小超过屏幕尺寸后最大化w /无边框

if (WindowState != FormWindowState.Maximized) 
{ 
    WindowState = FormWindowState.Maximized; 
    FormBorderStyle = FormBorderStyle.None; 
} 
else 
{ 
    WindowState = FormWindowState.Normal; 
    FormBorderStyle = FormBorderStyle.Sizable; 
} 

我也在动态调整窗体上的一些控件的布局后的变化。我发现ClientSize.WidthClientSize.Height的值超出了最大/无边界状态下的实际监视器分辨率(客户端大小:1936x1216,实际显示器分辨率:1920x1200)。这导致一些控件超出界限。

是否有一种简单的方法来确保表单不超过屏幕限制(手动检查屏幕尺寸并强制表单达到该尺寸)?

+0

这是完全正常的,允许的最大窗口大小的显示器尺寸加上边框。这确保了当您最大化窗口时,您只能看到客户区域而不看边界。所以,当你移除边界时,你现在不可避免地会得到一个太大的客户区。只要删除这段代码,这是没有必要的。如果你想重叠用户的任务栏,属于该问题的一个细节,那么你将不得不处理WM_GETMINMAXINFO消息。 –

+0

感谢您的反馈。我没有任何问题与任务栏。我发现首先关闭边框会导致所需的行为。 – thephez

+0

然后这段代码没有意义。一定要删除它,改变FormBorderStyle可能会有很多不良的副作用。当你发现了。 –

回答

0

事实证明,通过颠倒最大化和边框样式更改操作的顺序是可以解决的。如果在最大化屏幕之前关闭边框,则ClientSize值的值将与显示器尺寸完全匹配。

工作代码:

if (WindowState != FormWindowState.Maximized) 
{ 
    FormBorderStyle = FormBorderStyle.None; 
    WindowState = FormWindowState.Maximized; 
} 
相关问题