1 × 1显示4个图片框

本文关键字:4个 显示 | 更新日期: 2023-09-27 18:18:24

所以我有一个按钮和4个图片框,当我点击按钮时,我想在第一个图片框上添加图片1,如果我第二次点击按钮,我想让picturebox2 = picturebox1和picturebox1 =新图像,以此类推,直到4这就是我目前所做的,但它不起作用,它在所有4个图片框上显示相同的图像:

namespace ImageUploadAndCameraUse
{
    public partial class Form1 : Form
    {
        Image File;
        Image File2;
        Image File3;
        Image File4;
        bool button1Click = true;
        bool button1Click2 = true;
        bool button1Click3 = true;
        bool button1Click4 = true;
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog f = new OpenFileDialog();
            f.Filter = "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";
            bool IsNullOrEmpty1 = false;
            bool IsNullOrEmpty2 = false;
            bool IsNullOrEmpty3 = false;
            if (f.ShowDialog() == DialogResult.OK)
            {
                if (button1Click)
                {
                    File = Image.FromFile(f.FileName);
                    pictureBox1.Image = File;
                    IsNullOrEmpty1 = true;
                    button1Click = false;
                }
                if (IsNullOrEmpty1 && button1Click2 )
                {
                    File2 = Image.FromFile(f.FileName);
                    pictureBox2.Image = pictureBox1.Image;
                    pictureBox1.Image = File2;
                    IsNullOrEmpty2 = true;
                    button1Click2 = false;
                }
                if (IsNullOrEmpty2 && button1Click3)
                {
                    File3 = Image.FromFile(f.FileName);
                    pictureBox3.Image = File3;
                    IsNullOrEmpty3 = true;
                    button1Click3 = false;
                }
                if (IsNullOrEmpty3 && button1Click4)
                {
                    File4 = Image.FromFile(f.FileName);
                    pictureBox4.Image = File4;
                    button1Click4 = false;
                }
            }
        }
    }
}

1 × 1显示4个图片框

如果你知道:如果你没有任何东西,我如何让这个程序使用设备相机拍照/我将创建一个文件夹来存储所有这些照片

你可以通过循环你的PictureBoxes来实现这一点:

int boxIndex = 0;
private void button1_Click(object sender, EventArgs e) {
  OpenFileDialog f = new OpenFileDialog();
  f.Filter = "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";
  if (f.ShowDialog() == DialogResult.OK) {
    PictureBox[] boxes = new PictureBox[] { pictureBox1, pictureBox2, pictureBox3, pictureBox4 };
    if (boxIndex + 1 > boxes.Length) {
      foreach (PictureBox pb in boxes) {
        pb.Image = null;
      }
      boxIndex = 0;
    }
    for (int i = boxIndex; i > 0; --i) {
      boxes[i].Image = boxes[i - 1].Image;
    }
    boxes[0].Image = Image.FromFile(f.FileName);
    boxIndex++;
  }
}

尝试为PictureBox克隆或实例化新的位图:

File2 = Image.FromFile(f.FileName);
pictureBox2.Image = new Bitmap(pictureBox1.Image); // or pictureBox1.Image.Clone()
pictureBox1.Image = File2;

你复制参考,所以你总是显示相同的图片。

* *编辑

尝试改变你的算法,因为它有点复杂:

private List<Image> _images = new List<Image>();
private PictureBox[] _pictureBoxes = new [] { pictureBox1, pictureBox2, pictureBox3, pictureBox4 };
private void button1_Click(object sender, EventArgs e) {
    var fileName = GetFileName();
    if (string.IsNullOrEmpty(fileName)) return;
    var image = Bitmap.FromFile(fileName);
    _images.Insert(0, image); // I don't control items in list, you can remove items when reach count grater than 4
    for(var i = 0; i < Math.Min(_images.Count, 4); i++) {
        // _pictureBoxes[i].Image = null; // I'm not sure if this is necessary
        _pictureBoxes[i].Image = _images[i]; // set image as we store it in list
    }
}
private string GetFileName() {
    var form = new OpenFileDialog();
    form.Filter = "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";
    return form.ShowDialog() == DialogResult.OK ? form.FileName : "";
}

没关系,我自己用这样的开关解决了这个问题:

private void button1_Click(object sender, EventArgs e)
        {
            ++NumberOfClick;
            switch (NumberOfClick)
            {
                case 1:
                    OpenFileDialog f = new OpenFileDialog();
                    f.Filter = "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";
                    if (f.ShowDialog() == DialogResult.OK)
                    {
                        File = Image.FromFile(f.FileName);
                        pictureBox1.Image = File;
                    }
                    break;
                case 2:
                    OpenFileDialog f2 = new OpenFileDialog();
                    f2.Filter = "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";
                    if (f2.ShowDialog() == DialogResult.OK)
                    {
                        File = Image.FromFile(f2.FileName);
                        pictureBox2.Image = pictureBox1.Image;
                        pictureBox1.Image = File;
                    }
                    break;
                case 3:
                    OpenFileDialog f3 = new OpenFileDialog();
                    f3.Filter = "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";
                    if (f3.ShowDialog() == DialogResult.OK)
                    {
                        File = Image.FromFile(f3.FileName);
                        pictureBox3.Image = pictureBox2.Image;
                        pictureBox2.Image = pictureBox1.Image;
                        pictureBox1.Image = File;
                    }
                    break;
                case 4:
                    OpenFileDialog f4 = new OpenFileDialog();
                    f4.Filter = "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";
                    if (f4.ShowDialog() == DialogResult.OK)
                    {
                        File = Image.FromFile(f4.FileName);
                        pictureBox4.Image = pictureBox3.Image;
                        pictureBox3.Image = pictureBox2.Image;
                        pictureBox2.Image = pictureBox1.Image;
                        pictureBox1.Image = File;
                    }
                    break;
                default:
                    // other clicks
                    // . . .
                    break;
            }
        }