【发布时间】:2021-09-20 03:51:58
【问题描述】:
如何让面板使用我绘制的矩形点的相同坐标? 例如,假设我用
绘制一个矩形的点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);
之前:位置点 0,0
之后:
(0) 左上角 - 200,200
(1) 中心 - 300,300
定位点 200,200
矩形:(200, 200)-(400, 400) 尺寸:{Width=200, Height=200}
无论如何,面板总是偏移。
我尝试移动锚点,但这无济于事。
panel.Anchor = (AnchorStyles.Left | AnchorStyles.Top);
...我也试过了
ClientToScreen(panel.Handle, ref point);
...无济于事。
问题是否与父母(表单)的相对位置有关?我需要做什么才能简单地重新定位面板以使其与我的矩形对齐?
【问题讨论】:
-
您将 Point 设置为 Panel Client 区域。您需要面板的父级(表单)。锚点无关紧要。 -- 这些添加弥补了 PointToClient 和 PointToScreen 被这些像素所淘汰的事实:什么? -- 如果您的应用程序在具有 High-Dpi 显示器的机器上运行,则您的应用程序需要具有 DpiAware,否则无论如何都会得到错误的坐标。
-
谢谢吉米。这有帮助。
-
嗨@Jimi,我花了一天时间试图用另一个面板完成这项工作。我想我一定是在做一些不同的事情,所以我使用了上一个面板中的相同代码,它没有做同样的事情,而是被抵消了。为什么会这样?
-
不同的父母?我无法验证您的设置。
-
同一个父级。我只是想把第二个面板放在第一个面板旁边。两者都在同一个父级(表单)上。所以在我的图像中,第一个面板适合矩形。第二个面板也有一个位置。