我正在使用Windows窗体(C#)。我使用以下属性在窗体的Closing
事件中将窗口位置和大小保存到磁盘:
(int) Width, Height -> using the Form.Size property
(int) LocationX, LocationY -> using the Form.Location property
(bool) Maximized -> using the Form.WindowState property
表单是Application主表单。加载应用程序时,我将这些属性设置为表单。这很简单。
嗯,大部分时间它都很完美,但有时候,有时候,应用程序显示的很少。我添加了调试信息,这些是表单返回的值:
2011-09-01 20:02:44,334 DEBUG 9884 MainFormSettings - Width -> 160
2011-09-01 20:02:44,334 DEBUG 9884 MainFormSettings - Height -> 27
2011-09-01 20:02:44,334 DEBUG 9884 MainFormSettings - LocationX -> -32000
2011-09-01 20:02:44,334 DEBUG 9884 MainFormSettings - LocationY -> -32000
2011-09-01 20:02:44,334 DEBUG 9884 MainFormSettings - Maximized -> False
我确定我的窗口不是那么大(160,27),而且位置也不是-32000,因为我只使用一台显示器。
这似乎发生在我将应用程序打开了很长时间但不确定的时候。
提前致谢
答案 0 :(得分:3)
您看到的坐标是由于应用程序在关闭时被最小化的事实。 Windows通过实际将其从坐标移动到一些非常大的负X,Y坐标来“隐藏”您的表单。
以编程方式验证。来自Vista上的表单应用程序的输出:
来自代码:
System.Diagnostics.Debug.WriteLine(
"Current coordinates X: " + Location.X + " Y: " + Location.Y );
要解决此问题,我只需在您的应用关闭时检查这样的值,而不是实际将其保存到文件中。如果您不想在任意坐标值上进行数学操作,您还可以检查WindowState。
我在上一篇SO帖子中找到了上述答案: http://msdn.microsoft.com/en-us/library/system.windows.forms.formwindowstate.aspx
答案 1 :(得分:2)
您可以使用表单上的RestoreBounds属性在窗体最小化时获取窗口大小+位置。
例如:
private void Form_Closing(object sender, FormClosingEventArgs e)
{
Location locationToSave = this.WindowState == FormWindowState.Minimized ? this.RestoreBounds.Location : this.Location;
Size sizeToSave = this.WindowState == FormWindowState.Minimized ? this.RestoreBounds.Size : this.Size;
WindowState windowStateToSave = this.WindowState;
// ... save your state
}