将面板放置在具有屏幕坐标的矩形中

place panel in rectangle with screen coordinates

如何让面板使用与我绘制的矩形的点相同的坐标? 例如,假设我用

绘制矩形的点
SetCursorPos(200, 200); // top left
SetCursorPos(200, 400); // top right
SetCursorPos(400, 400); // bottom right
SetCursorPos(200, 400); // bottom left
SetCursorPos(300, 300); // center

然后我创建一个面板,并赋予它相同的尺寸

panel.Size = new Size(200, 200);

现在我想将面板准确定位在矩形的位置。

这是我遇到问题的地方。 我一直在努力实现这一点,但没有成功。 我试过了...

Control control = panel;
Point point control.PointToClient(new Point(200 + 8, 200 + 32)); // the additions make up for the fact that PointToClient and PointToScreen are out by those pixels

这显示了我放置面板时的正确坐标。

panel.Location = new Point(point.X, point.Y);

Before : Location point 0,0

After :

(0) top left - 200,200

(1) center - 300,300

Location point 200,200

Rect: (200, 200)-(400, 400) Size: {Width=200, Height=200}

然而,无论如何,面板总是偏移的。

我尝试移动锚点,但这没有帮助。

panel.Anchor = (AnchorStyles.Left | AnchorStyles.Top);

...我也试过了

ClientToScreen(panel.Handle, ref point);

...无济于事。

问题可能与 parent 的 (Form) 相对位置有关吗?我需要做什么才能简单地重新定位面板,使其与我的矩形对齐?

我想出了一个方法来得到我想要的。 我使用 parent 的左上角,然后从我想要放置的 child 的左上角减去它。然后使用结果值作为位置。

panel.Location = new Point(panel.Left - parent.Left, panel.Top - parent.Top);

这样,我总是知道 objects 相对于其 parent 的位置。

结果

已编辑: 我再次尝试 Jimi 的建议,它确实有效。 (问题出在我的坐标上。)

Control control = form; // not panel
Point point control.PointToClient(new Point(200, 200)); 
panel.Location = point;

再次感谢吉米