如何解决将面板放置在具有屏幕坐标的矩形中
如何让面板使用我绘制的矩形点的相同坐标? 例如,假设我用
绘制矩形的点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) 尺寸:{宽度=200,高度=200}
然而,无论如何,面板总是偏移。
我尝试移动锚点,但这无济于事。
panel.Anchor = (AnchorStyles.Left | AnchorStyles.Top);
...我也试过
ClientToScreen(panel.Handle,ref point);
...无济于事。
问题是否与父(Form)的相对位置有关?我需要做什么才能简单地重新定位面板,使其与我的矩形对齐?
解决方法
我想出了一种方法来获得我想要的东西。 我使用父母的左上角,并从我想要放置的孩子的左上角减去它。然后将结果值用于位置。
panel.Location = new Point(panel.Left - parent.Left,panel.Top - parent.Top);
这样,我总是知道对象相对于其父对象的位置。
结果
编辑: 我再试一次吉米的建议,它确实有效。 (问题出在我的坐标上。)
Control control = form; // not panel
Point point control.PointToClient(new Point(200,200));
panel.Location = point;
再次感谢吉米。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。