当用户调整大小并调整程序窗口(Winforms)的位置时,即使关闭并重新打开程序,他们也希望窗口处于同一位置。我所做的是存储表单的Width,Height,Location.X和Location.Y属性,并在重新打开程序时将其设置回来。
问题是当窗口最大化时,宽度,高度,X,Y不是指未经最大化的宽度/高度/ X / Y,而是指最大化尺寸。
因此,当用户使窗口最大化,关闭并重新打开程序,并且继续使窗口取消最大化,而不是返回到原始位置/大小时,它会保持全尺寸/位置。
因此,在某些事件执行后不使用kludge来存储变量,如何在窗口最大化时获得非最大化的位置和大小?
答案 0 :(得分:3)
我发现解决此问题的最佳方法是使用RestoreBounds结构。当窗口最大化时,RestoreBounds将引用旧的(非最大化)大小和位置。这是找出这些值的代码。只需在关闭时保存这些值,然后在重新打开程序时,可以将表单的宽度,高度,位置.X和位置.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;