C# 保存控件位置并将其加载回

C# 保存控件位置并将其加载回,c#,.net,winforms,controls,panel,C#,.net,Winforms,Controls,Panel,我有一个面板(带有自动滚动),其中包含随机放置的用户控件,我希望保存这些控件的位置,并在以后将其加载回,以便它们精确地放置在以前的位置 在.NET中执行此操作的正确方法是什么?目前,这是我保存到数据库中的X,Y: X:Math.Abs(panel.AutoScrollPosition.X)+control.Location.X Y:Math.Abs(panel.AutoScrollPosition.Y)+control.Location.Y 当我加载控件时,我会: 控制点位置=新系统图点(X,Y

我有一个面板(带有自动滚动),其中包含随机放置的
用户控件
,我希望保存这些控件的位置,并在以后将其加载回,以便它们精确地放置在以前的位置

在.NET中执行此操作的正确方法是什么?目前,这是我保存到数据库中的X,Y:

X:
Math.Abs(panel.AutoScrollPosition.X)+control.Location.X

Y:
Math.Abs(panel.AutoScrollPosition.Y)+control.Location.Y

当我加载控件时,我会: 控制点位置=新系统图点(X,Y)

但是我想我遗漏了一些东西,因为AutoScroll在.NET中的行为方式。有时我发现加载后控件放错了位置(与原来的位置不同)


我一直在想,我真的希望能在这里找到一些信息。

不确定您使用的所有配置,但请确保滚动条的增量步骤是整数。接下来,确保将控件添加回面板控件树而不是父窗体,并设置位置

您可以使用app.config文件保存这些设置,因此当您需要它们时,只需调用app.config中的密钥设置即可


我认为没有一个合适的方法,不管你感觉如何,它都可以工作,但是如果你要动态创建控件,你可以像现在一样拥有一个数据库。但是,如果只有几个控件,则app.config文件会更好地工作。

我猜您希望在滚动后将控件恢复到其当前的可视位置,这就是您考虑自动滚动的原因?当你说这些控件放错位置时,它们是否相对移动了,或者整批控件是否“滚动”到了错误的位置

你对数学有把握吗?这似乎有点奇怪;我会尝试只添加Location.X和AutoScrollPosition.X(或使用-AutoScrollPosition.X)

我还将在还原时检查AutoScrollPosition当前是否为0