2015-05-11 183 views
1

当用户调整大小并调整我的程序窗口(Winforms)的位置时,即使关闭并重新打开程序后,他们也期望在同一位置看到窗口。我所做的是存储窗体的宽度,高度,Location.X和Location.Y属性,并在程序重新打开时重新设置它们。当窗口最大化时获得非最大化的窗口位置/大小

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

因此,当用户使窗口最大化时,关闭并重新打开程序,并取消窗口的最大化,而不是返回到原来的位置/大小,它将保持全尺寸/位置。

因此,在某些事件执行后,如果不使用kludge存储变量,那么当窗口最大化时如何获得非最大化的位置和大小?

回答

2

解决此问题的最佳方法是找到使用RestoreBounds结构。当窗口最大化时,RestoreBounds将引用旧的(未最大化)大小和位置。这是查找这些值的代码。只需在关闭时保存这些值,然后在重新打开程序时,可以将窗体的Width,Height,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; 
+1

为什么地球上你会比较枚举的字符串表示形式?只需做一个简单的'WindowState!= FormWindowState.Maximized'。 – cremor

+0

除了@ cremor的建议,您可以通过将'WindowState == FormWindowState.Maximized'分配给var并测试该布尔值来进一步改进此答案。 –

+0

好了。我搜索了大约15分钟来查找RestoreBounds属性,所以这是答案的肉,并且它被应用于我创建的旧代码,所以请原谅我没有为优化而节省5毫秒;) –