设置 C# 图片框容器

Set C# Picturebox Container

我正在创建一个带有 PictureBox 控件的 Windows 表单,并且需要知道它们相对于表单的位置。我想将它们的容器更改为表单,但它们必须保留在它们已经存在的 Panel 控件之上。有没有办法通过代码设置图片框的容器?

你要什么可以通过设置控件Parent property and then calling BringToFront方法来完成。

然而,更改父项也会更改控件位置的处理方式,因此为了将其保留在其原始位置,您需要知道窗体的相对位置。其中returns你又回到了原来的问题。

可以使用 PointToScreen and 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();