计算机上的位置坐标显示X = -32000,Y = -32000

我有一个C#应用程序,当它closures时保存它的状态,然后在启动时读入保存的状态。 一个保存的项目是主窗体的位置。 通常这个工程很好 – 在我的代码中有这样一行,将位置保存到一个文件,然后在启动时读回:

streamWriter.WriteLine("location:" + this.Location.X + "," + this.Location.Y); 

通常,在具有多个显示器的机器上,位置坐标如下所示:

 location:-1069,283 

偶尔我会看到像这样保存的坐标:

 location:-32000,-32000 

然后,当用户将应用程序重新启动时,表单就会离开桌面,不能被普通用户轻松地取回。

发生什么事情使这个坐标被这样读取,并且有build议来防止这种情况?

Solutions Collecting From Web of "计算机上的位置坐标显示X = -32000,Y = -32000"

你看到的坐标是由于应用程序在关闭时被最小化。 Windows“隐藏”了你的表格,实际上是将它从坐标移动到一些可笑的X,Y坐标。

以编程方式验证:

从Vista上的表单应用输出:

当前坐标X:184 Y:184 *默认位置当前坐标X: – 32000 Y: – 32000 *最小化位置

从代码:

System.Diagnostics.Debug.WriteLine(“当前坐标X:”+ Location.X +“Y:”+ Location.Y);

为了解决这个问题,我简单地检查一下你的应用程序正在关闭时的值,而不是实际上将它保存到文件中。

如果你不想在任意坐标值上搞数学,你也可以检查WindowState。 在MSDN上看到这里

在窗体上使用RestoreBounds属性。

编辑:这是从我的一些代码复制/粘贴(可能会使用一些清理,但它得到了点)。 这是从我的主窗体的FormClosing事件处理程序:

 // Save the last form state Program.AppSettings.MainWindowFormState = this.WindowState; // Check if the window is minimized or maximized if ((this.WindowState == FormWindowState.Minimized) || (this.WindowState == FormWindowState.Maximized)) { // Use the restored state values Program.AppSettings.MainWindowX = this.RestoreBounds.Left; Program.AppSettings.MainWindowY = this.RestoreBounds.Top; Program.AppSettings.MainWindowWidth = this.RestoreBounds.Width; Program.AppSettings.MainWindowHeight = this.RestoreBounds.Height; } else { // Use the normal state values Program.AppSettings.MainWindowX = this.Left; Program.AppSettings.MainWindowY = this.Top; Program.AppSettings.MainWindowWidth = this.Width; Program.AppSettings.MainWindowHeight = this.Height; } 

这里是如何恢复负载状态(记得设置你的窗体的初始位置模式为手动,以避免闪烁):

 // Set the initial form state this.WindowState = Program.AppSettings.MainWindowFormState; this.Left = Program.AppSettings.MainWindowX; this.Top = Program.AppSettings.MainWindowY; this.Width = Program.AppSettings.MainWindowWidth; this.Height = Program.AppSettings.MainWindowHeight;