当window最大化时得到非最大化windowposition/size
Obtain non-maximized window position/size when window is maximized
当用户调整我的程序 window (Winforms) 的大小和位置时,他们希望在同一位置看到 window,即使在关闭并重新打开程序后也是如此。我所做的是存储窗体的宽度、高度、Location.X 和 Location.Y 属性,并在程序重新打开时将它们重新设置。
问题是当 window 最大化时,宽度、高度、X、Y 不是指未最大化的 Width/Height/X/Y,而是指最大化的尺寸。
因此,当用户将 window 最大化时,关闭并重新打开程序,然后继续取消最大化 window,而不是返回到原始 position/size , 它坚持完整 size/position.
所以在某些事件执行后不使用kludge来存储变量,如何在window最大化时获取非最大化位置和大小?
我发现解决这个问题的最佳方法是使用 RestoreBounds 结构。当 window 最大化时,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;
当用户调整我的程序 window (Winforms) 的大小和位置时,他们希望在同一位置看到 window,即使在关闭并重新打开程序后也是如此。我所做的是存储窗体的宽度、高度、Location.X 和 Location.Y 属性,并在程序重新打开时将它们重新设置。
问题是当 window 最大化时,宽度、高度、X、Y 不是指未最大化的 Width/Height/X/Y,而是指最大化的尺寸。
因此,当用户将 window 最大化时,关闭并重新打开程序,然后继续取消最大化 window,而不是返回到原始 position/size , 它坚持完整 size/position.
所以在某些事件执行后不使用kludge来存储变量,如何在window最大化时获取非最大化位置和大小?
我发现解决这个问题的最佳方法是使用 RestoreBounds 结构。当 window 最大化时,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;