【问题标题】:get/set the position of a control in a container获取/设置控件在容器中的位置
【发布时间】:2025-12-16 13:55:02
【问题描述】:

所以我创建了一个软件,允许您将控件拖放到其面板中移动它们并将控件拖放到这些控件中并将它们保存到 mysql 数据库中。

问题在于,当您保存布局并重新加载它时,控件中的控件不在完全相同的位置

所以我将控件位置保存到像“110:10”这样的文本中,并将该文本保存到数据库中

Dim ylocation As String = PointToScreen(c.Location).X & ":" & PointToScreen(c.Location).Y

我像这样加载它

Dim esp() As String = Split(.GetString(9), ":")
Dim loc As Point = Me.PointToClient(New Point(CInt(esp(0)), CInt(esp(1))))

这是保存后的控件位置

这是加载后的控件位置

【问题讨论】:

  • 是否需要转换为屏幕坐标并返回?你可以只存储实际的位置坐标,这有什么不同吗?
  • 是的,出于某种原因,我预先创建了一个控件设置并保存它们并使用pointtoclient加载它们,从原始位置到两个坐标与其当前位置的坐标由于某种原因返回一个偏离位置,原始控制位置是 100,100,使用 pointtoclient 它返回 +/-90,+/-90 和位置返回 -24,84

标签: mysql .net panel


【解决方案1】:

发现问题,我在加载脚本中使用了me.pointtoclient

Dim loc As Point = Me.PointToClient(New Point(CInt(esp(0)), CInt(esp(1))))

替换为

New Point(CInt(esp(0)), CInt(esp(1)))

没有改变任何其他东西,它完美地工作:)

【讨论】: