所以基本上我想做的是将 PictureBox 控件置于具有指定大小的空窗口窗体上,假设窗体的大小实际上总是大于我的控件的大小。但是,每当我试图将它居中(我的意思是实际上与表格的边缘距离相等,宽度距离相等,高度距离相等,因为高度和宽度在我的代码中不相等。例如:宽度= 700和Height=500),窗体底部和控件底部之间的空间小于窗体顶部和控件顶部之间的空间。
用一张图来说明这个问题: /image/URozj.png
这是完整的代码,请不要批评它背后的原因,我只是想知道如果我将它添加到表单中,为什么表单会调整大小或将我的控件放在底部。
public static class Engine
{
public static Graphics G;
public static Bitmap Map;
public static PictureBox Canvas;
public static void Initialize_mystuff(int width, int height)
{
Map = new Bitmap(width, height);
G = Graphics.FromImage(Map);
Canvas = new PictureBox();
Canvas.Size = new Size(Map.Width, Map.Height);
Canvas.BorderStyle = BorderStyle.FixedSingle;
Canvas.BackgroundImage = Map;
}
public static Point CenterUControl(Size Parent, Size Child)
{
return new Point(Parent.Width / 2 - Child.Width / 2, Parent.Height / 2 - Child.Height / 2);
}
}
所以上面是我初始化我正在使用的所有东西的代码,还有一个函数可以返回对象相对于它的父对象应该居中的位置。下面是我调用初始化的代码和表单构造函数中的中心函数。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.SuspendLayout();
Engine.Initialize_mystuff(400,400);
this.Controls.Add(Engine.Canvas);
this.Size = new Size(700, 500);
Engine.Canvas.Location=Engine.CenterUControl(this.Size, Engine.Canvas.Size);
this.ResumeLayout();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
窗体的 AutoSize 属性也设置为 false。
表单的大小包括表单的边框和非客户区(标题栏等)。使用表单的尺寸时,请改用 ClientSize 属性:
Engine.Canvas.Location = Engine.CenterUControl(this.ClientSize, Engine.Canvas.Size);
我是一名优秀的程序员,十分优秀!