将面板放置在具有屏幕坐标的矩形中
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;
再次感谢吉米
如何让面板使用与我绘制的矩形的点相同的坐标? 例如,假设我用
绘制矩形的点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;
再次感谢吉米