gpt4 book ai didi

c# - 保持 PictureBox 在容器内居中

转载 作者:可可西里 更新时间:2023-11-01 08:59:42 26 4
gpt4 key购买 nike

我正在设计一个能够进行一些基本图像处理的简单图片查看器。目前,我遇到的问题是始终将 PictureBox 居中放置在 TabPage 中,并保持图片框的宽度和大小与其显示的图片相同。到目前为止,我没有成功。

我在表单构造函数中调用了以下代码以将其置于中心。它第一次使图片框居中:

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;
}

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

IT is ok the first time

当我调整表单大小时,问题变得更糟,图片框位置将转到顶部:

Form resized

我也在表单的调整大小事件中调用了上面的代码,不知道为什么它在应用程序启动时起作用。如果有人能告诉我我应该注意哪些属性来实现一个始终与其图像一样大的居中图片框,那就太好了。

最佳答案

如果你只是将 Anchor 样式设置为 none 就很容易了:

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

然后,每当您更改 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();
}

Anchor = None 将在父容器调整大小时为您居中 PictureBox 控件,因为它“没有”锚定到默认的 Left 和 Top 位置.

关于c# - 保持 PictureBox 在容器内居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9375588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com