设置 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();
我正在创建一个带有 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();