保持PictureBox在容器内居中

Sae*_*ani 10 c# picturebox winforms

我正在设计一个简单的图片浏览器,能够进行一些基本的图像处理.目前我的问题PictureBoxTabPage始终保持居中,并保持图片框的宽度和大小与其显示的图片相同.到目前为止,我没有成功.

我有以下代码,我在表单构造函数中调用它来将其定位在中心.它第一次使图片框居中:

private void SetPictureBoxOriginalSizeAndLocation(bool makeImageNull = false, DockStyle dockStyle = DockStyle.None)
{
    if (makeImageNull) picBoxView.Image = null;
    picBoxView.Dock = dockStyle;

    var xPoint = tabImageView.Location.X + ((splitContainer.Panel2.Width / 2) / 2);
    var yPoint = tabImageView.Location.Y;

    var width = tabImageView.Width / 2;
    var height = (tabImageView.Height / 2) - toolStripImageView.Height;

    if (picBoxView.Image == null) return;

    //Resize image according to width
    picBoxView.Image = ImageMethods.ResizeImage(picBoxView.Image.Tag.ToString(), width, height, false); 

    picBoxView.Location = new Point(xPoint, yPoint);
    picBoxView.Width = width;
    picBoxView.Height = height;
}
Run Code Online (Sandbox Code Playgroud)

但它不会将图片框调整为其图像(您可以看到图片框控件的背面颜色为黑色部分):

第一次,这是好的

一旦我调整表单大小,问题就会越来越严重,图片框位置将会变为顶部:

表格已调整大小

我在表单的resize事件中调用上面的代码,也不知道为什么它在应用程序启动时有效.如果有人可以告诉我应该照顾哪些属性以获得一个总是与其图像一样大的精美中心的图片框,那将是很好的.

Lar*_*ech 18

如果你只将Anchor样式设置为none,这很容易:

picBoxView = new PictureBox();
picBoxView.SizeMode = PictureBoxSizeMode.AutoSize;
picBoxView.Anchor = AnchorStyles.None;
tabImageView.Controls.Add(picBoxView);
CenterPictureBox(picBoxView, myImage);
Run Code Online (Sandbox Code Playgroud)

PictureBox每当您更改以下图像时,只需将最初居中PictureBox:

private void CenterPictureBox(PictureBox picBox, Bitmap picImage) {
  picBox.Image = picImage;
  picBox.Location = new Point((picBox.Parent.ClientSize.Width / 2) - (picImage.Width / 2),
                              (picBox.Parent.ClientSize.Height / 2) - (picImage.Height / 2));
  picBox.Refresh();
}
Run Code Online (Sandbox Code Playgroud)

每当父容器调整大小时,Anchor = None将使PictureBox控件为中心,因为它"未"锚定到默认的Left和Top位置.