如何在图片框C#中更改图像

How to change image in picturebox C#

我需要通过点击图片框来改变图片,但是当我再次点击它时我不能return以前的图片

这是我的代码:

private void PictureBox_Click(object sender, EventArgs e)
{
    if (pictureBox.Image == Properties.Resources.openeye)
        pictureBox.Image = Properties.Resources.closeeye;
    else
        pictureBox.Image = Properties.Resources.openeye;
}

我该如何解决?

你可以设置图片框图片的值,但是你不能那样设置。

你可以在方法外使用全局变量,走这条路。

    int i = 0;

    private void PictureBox1_Click(object sender, EventArgs e)
    {            
        if (i == 0)
        {
            pictureBox1.Image = Properties.Resources.close;
            i++;
        }                   
            else
        {
            pictureBox1.Image = Properties.Resources.open;
            i--;
        }                               
    }

这是一个用两张图片演示的例子。一个 "x" 另一个 "o".

如您所见,表单有两个实例变量 xo 来存储每个 Image 对象。还有另一个名为 isX 的标志字段,ClickHandle 事件处理程序使用它来检查当前显示的图像并切换到另一个图像,然后事件处理程序切换 isX 字段,因此下一个点击正确响应。

public void Main(string[] args)
{
    var f1 = new Form1(); // form instance that holds the PictureBox

    Task.Run(() => Application.Run(f1)); //I'm running this from LINQPad, but this would also work in a console application.
}

public class Form1 : Form // Derives from the Form class
{
    private bool isX; // private instance variable to indicate which image is diplayed
    private Image x; // private instance variable storing the x image
    private Image o; // private instance variable storing the o image

    // the picture box this form uses
    private PictureBox p;

    public Form1()
    {
        // load the images from wherever they are stored.
        // I do this at construction time to avoid doing disk IO when clicking
        x = Image.FromFile(@"C:\image\path\x.png");
        o = Image.FromFile(@"C:\image\path\o.png");

        // Initialize the picture box
        p = new PictureBox {
            Name = "p1",
            Size = new Size(100,100),
            Location = new Point(100,100),
            Image = o //Initialize with the o image
        };

        // register the click event handler
        p.Click += this.ClickHandle;

        // set the flag to false, since the o image is what we start with
        this.isX = false;

        // add PictureBox p to the form
        this.Controls.Add(p);
    }

    // handles the click action, registered to the PictureBox.Click event
    private void ClickHandle(object sender, EventArgs e)
    {
        // use the flag to check which image is shown, and display the other image
        if(this.isX) // this might work with your image == check, I didn't test it
        {
            p.Image = this.o;
        }
        else
        {
            p.Image = this.x;
        }
        // set the flag to the opposite of whatever the flag currently is
        this.isX = ! isX;
    }
}

您可以将值保存在 PictureBox 对象的未使用标签 属性 中。

pictureBox1.Tag = 1; //Set it to whatever

if (pictureBox1.Tag == "1") { } //Do your check

你可以用这个。

    private void pictureBox1_Click(object sender, EventArgs e)
    {
        if (pictureBox1.Image!=null&& getSignatureLen( pictureBox1.Image) == getSignatureLen(Properties.Resources.openeye))
        {
            pictureBox1.Image = Properties.Resources.closeeye;
        }
        else
        {
            pictureBox1.Image = PProperties.Resources.openeye;
        }
    }

    public long  getSignatureLen(Image img)
    {
        using (System.IO.MemoryStream mStream = new System.IO.MemoryStream())
        {
            img.Save(mStream, img.RawFormat);
            return mStream.Length;
        }
    }