Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取表单的位置及其显示的屏幕,并在下次显示表单时恢复该位置?_C#_.net_Winforms_Position_Screen - Fatal编程技术网

C# 如何获取表单的位置及其显示的屏幕,并在下次显示表单时恢复该位置?

C# 如何获取表单的位置及其显示的屏幕,并在下次显示表单时恢复该位置?,c#,.net,winforms,position,screen,C#,.net,Winforms,Position,Screen,我有2个监视器,我需要保存表单位置,它应该在屏幕上显示它关闭的位置 有人能建议如何获取它所在的屏幕,并在表单加载时在关闭表单的屏幕上显示它吗 我保存在注册表中的设置。最简单的方法是调用。返回包含窗口屏幕坐标信息的 使用此函数而不是Form.Location属性可以解决多个监视器、最小化窗口、位置奇怪的任务栏等问题 攻击的途径是在应用程序关闭时调用GetWindowPlacement函数,将窗口的位置持久化到注册表中,或者在存储它的任何位置,注册表不再是保存应用程序状态的推荐位置,然后当应用程序重

我有2个监视器,我需要保存表单位置,它应该在屏幕上显示它关闭的位置

有人能建议如何获取它所在的屏幕,并在表单加载时在关闭表单的屏幕上显示它吗


我保存在注册表中的设置。

最简单的方法是调用。返回包含窗口屏幕坐标信息的

使用此函数而不是Form.Location属性可以解决多个监视器、最小化窗口、位置奇怪的任务栏等问题

攻击的途径是在应用程序关闭时调用GetWindowPlacement函数,将窗口的位置持久化到注册表中,或者在存储它的任何位置,注册表不再是保存应用程序状态的推荐位置,然后当应用程序重新打开时,调用相应的将窗口恢复到其以前的位置

由于这些是Win32 API公开的本机函数,并且您使用的是C语言,因此需要通过p/Invoke调用它们。以下是组织目的所需的定义,我建议将这些定义放在名为NativeMethods的静态类中:

要获取应用程序关闭时窗口的当前位置,请使用以下代码:

WINDOWPLACEMENT wp = new WINDOWPLACEMENT();
wp.length = Marshal.SizeOf(wp);
GetWindowPlacement(MyForm.Handle, ref wp);

回想一下,我提到过注册表不再是持久化应用程序状态的推荐位置。因为您是在.NET中开发的,所以您有更多功能强大、用途广泛的选项可供选择。由于上面声明的WINDOWPLACEMENT类标记为[Serializable],因此将此信息序列化到您的中,然后在下次打开时重新加载它将非常容易。

我多次实现了类似的功能。您所要做的就是在窗体关闭时保存Form.WindowsState、Form.Size和Form.Loaction属性,并在窗体打开时恢复这些属性。

可能重复“否”,我知道如何保存绑定等,但问题是如何使窗体在监视器上显示其关闭位置检查:但如果我保存Form.DestopBounds,这不是同一件事吗?我不确定,但可能是一样的。无论如何,节省空间和位置对我来说也很有用。
WINDOWPLACEMENT wp = new WINDOWPLACEMENT();
wp.length = Marshal.SizeOf(wp);
GetWindowPlacement(MyForm.Handle, ref wp);