微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

绘制矩形的点
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}

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

enter image description here

我尝试移动锚点,但这无济于事。

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

...我也试过

ClientToScreen(panel.Handle,ref point);

...无济于事。

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

解决方法

我想出了一种方法来获得我想要的东西。 我使用父母的左上角,并从我想要放置的孩子的左上角减去它。然后将结果值用于位置。

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

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

结果

enter image description here

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

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

再次感谢吉米。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?