获取窗口最大化时非最大化的窗口位置/大小

Dan*_*n W 5 c# forms window maximize winforms

当用户调整程序窗口(Winforms)的大小和位置时,他们希望看到窗口处于相同的位置,即使在关闭并重新打开程序之后也是如此。我所做的就是存储表单的宽度、高度、Location.X 和 Location.Y 属性,并在程序重新打开时将它们设置回来。

问题是当窗口最大化时,宽度、高度、X、Y 不是指非最大化的宽度/高度/X/Y,而是指最大化尺寸。

因此,当用户将窗口最大化,关闭并重新打开程序,然后继续取消最大化窗口时,它不会返回到原始位置/大小,而是停留在完整大小/位置。

那么,在某些事件执行后,如果不使用拼凑来存储变量,如何获取窗口最大化时的非最大化位置和大小呢?

Dan*_*n W 7

我发现解决这个问题的最佳方法是使用 RestoreBounds 结构。当窗口最大化时,RestoreBounds 将引用旧的(非最大化)大小和位置。这是找出这些值的代码。只需在关闭时保存这些值,然后当重新打开程序时,您可以将表单的宽度、高度、Location.X 和 Location.Y 设置回这些保存的值。

bool b = WindowState == FormWindowState.Maximized;
int xpos = !b? Location.X : RestoreBounds.X;
int ypos = !b? Location.Y : RestoreBounds.Y;
int width = !b? Width : RestoreBounds.Width;
int height = !b? Height : RestoreBounds.Height;
Run Code Online (Sandbox Code Playgroud)