在更改父项时,恢复PictureBox的先前绝对位置?

时间:2015-05-06 02:34:19

标签: c# winforms

在我的GUI中,我需要将Parents的{​​{1}}更改为后台PictureBoxes,以便透明度正常工作。

但是,更改父级也会更改图片框的位置。我试过通过PictureBox抓取图片框的绝对位置,但它不起作用。我将坐标放在注释中,并且在分配新父项后它们不会更改,即使图像明显改变了位置。此外,我不认为它可能会工作,因为它通过了一个点,而不是一个有关父母的更多信息的对象,以及推断绝对位置所需要的东西。

推断元素绝对位置的正确方法是什么,以便在父元素更改后将图像移动到正确的位置?或者有更好的方法吗?

PointToClient

1 个答案:

答案 0 :(得分:2)

这会将控件child从一个父级移动到一个父级,保持绝对屏幕位置不变:

void MoveTo(Control child, Control newParent )
{
    child.Location = newParent.PointToClient(child.PointToScreen(Point.Empty));
    child.Parent = newParent;
}

PointToClientPointToScreen的技巧是从右侧父控件中使用它们;不设置控件将默认为Form,这将错过父母的实际位置..