我正在创建一个带有PictureBox
控件的Windows窗体,需要知道它们相对于窗体的位置。我想将容器更改为表单,但它们必须保留在它们已经存在的Panel
控件之上。有没有办法通过代码设置图片框的容器?
答案 0 :(得分:1)
您可以通过设置控件Parent
属性然后调用BringToFront
方法来完成您的要求。
但是更改父级也会更改控件位置的处理方式,因此为了将其保留在原始位置,您需要知道表单的相对位置。这将使您回到原始问题。
可以使用PointToScreen
和PointToClient
这样的方法来确定控件与表单的相对位置:
public static class ControlUtils
{
public static Point GetFormLocation(this Control control)
{
return control.FindForm().PointToClient(control.PointToScreen(control.Location));
}
}
所以你可以使用
var formLocation = pictureBox.GetFormLocation();
随时您需要知道图片框与表单的相对位置。
如果这就是你所需要的,我建议你不要更换他们的容器。但是如果你仍然想要这样做,你可以使用这样的东西:
var location = pictureBox.PointToScreen(pictureBox.Location);
pictureBox.Parent = pictureBox.FindForm();
pictureBox.Location = pictureBox.Parent.PointToClient(location);
pictureBox.BringToFront();