用图片框on_click c#切换图片框的图片

Posted

技术标签:

【中文标题】用图片框on_click c#切换图片框的图片【英文标题】:Toggle the picture of picture box with picture box on_click c# 【发布时间】:2016-03-17 08:18:31 【问题描述】:

我的图片框中有一个图像,使用资源我想要更改图像,当我单击 icon.png 时,它应该在图片框中更改为 icon1.png,然后当我再次单击图片框时,它应该改为icon.png

private void pictureBox10_Click(object sender, EventArgs e)
    
        if (pictureBox10.ImageLocation != @"icon1.png")
        
            var image = Image.FromFile(@"icon1.png");
            pictureBox10.Image = image;

        
        if (pictureBox10.ImageLocation == @"icon1.png")
        
            var image = Image.FromFile(@"icon.png");
            pictureBox10.Image = image;
        

    

但它不起作用,请帮我解决这个问题。

【问题讨论】:

你试过什么?发生什么了?你试过打电话给DoEvents()吗? 我只是使用 onlick 函数来更改图像,而 picurebox10.imagelocation 给出了一个空值,这就是为什么它只适用于第一个 if 条件 调试代码时,ImageLocation 属性中出现了什么?我不是 100% 确定设置 Image 属性也会设置 ImageLocation 属性 它有效,但仅适用于第一个 if 条件,其中 picturebox10.imagelocation 的值为 null,因此它满足第一个条件,因此仅适用于第一个条件图像正在更改 其实条件不行 【参考方案1】:

您从图像位置获得空值,因为在将图片分配给 Image 属性时未设置该值。有几种方法可以解决这个问题:

    更改分配,以便使用 ImageLocation 分配

    pictureBox10.ImageLocation = @"icon1.png";
    

    更改检查以查看 Image 属性是否等于您的新 Image

    pictureBox10.Image == Image.FromFile(@"icon.png");
    

    在设置图片属性的同时设置图片位置

    pictureBox10.Image == Image.FromFile(@"icon.png");
    pictureBox10.ImageLocation = @"icon.png" ;
    

我觉得第二个可能不一样,你可能想尝试第一个或第三个

建议代码:

private void pictureBox10_Click(object sender, EventArgs e)

    if (pictureBox10.ImageLocation != @"icon1.png")
    
        pictureBox10.ImageLocation = @"icon1.png"

    
    if (pictureBox10.ImageLocation == @"icon1.png")
    
        pictureBox10.ImageLocation = @"icon.png";
    


或者:

private void pictureBox10_Click(object sender, EventArgs e)

    if (pictureBox10.ImageLocation != @"icon1.png")
    
        var image = Image.FromFile(@"icon1.png");
        pictureBox10.Image = image;
        pictureBox10.ImageLocation = @"icon1.png";

    
    if (pictureBox10.ImageLocation == @"icon1.png")
    
        var image = Image.FromFile(@"icon.png");
        pictureBox10.Image = image;
        pictureBox10.ImageLocation = @"icon.png";
    


您还需要更新初始属性设置以设置 ImageLocation 而不是 Image 属性,或者在设置 Image 文件的同时设置 ImageLocation

编辑

在我的脑海中,最初设置属性,你可以这样做(Source):

protected override void OnLoad(EventArgs e)
    pictureBox10.ImageLocation = @"icon.png";

虽然我不记得当时是否会创建 PictureBox,但如果没有,请改用 onShown 事件 (Source)

编辑 2

这里是另一种创建事件和设置属性的方法,首先按照here的步骤将事件onShown添加到表单中。您需要单击表单本身而不是表单内的控件来查找事件。

完成后,在事件中添加以下代码:

pictureBox10.ImageLocation = @"icon.png";

这应该有助于解决您的问题

【讨论】:

您知道该属性工作正常,但条件不正确,因为 ipicturebox10.location 返回一个空值 它返回null,因为它没有被设置,当你设置属性Image时它不会同时设置属性ImageLocation! 什么不工作 @arn48 是 ImageLocation 属性设置与否? 当我复制代码并粘贴它时什么都不做,这是什么问题? 那是因为它可能在第一次创建 PictureBox 时没有设置。您是初始化 PictureBox 还是使用 Visual Studio 自动生成代码?如果是第一个,则需要在设置 Image 的第一点设置 ImageLocation,如果是第二个,则在表单构建期间(可能在您的构造函数中),您需要手动设置 ImageLocation 的属性【参考方案2】:

尝试将图片直接引用到图片框中:

pictureBox10.Image = Image.FromFile(@"Images\a.bmp");

Source

【讨论】:

【参考方案3】:

谢谢大家,非常感谢,但有一些问题,但已经解决了这个问题,所以我写了实际的代码......

public Form1()
    
        InitializeComponent();
        pictureBox10.ImageLocation = @"icon.png";
    
    private void pictureBox10_Click(object sender, EventArgs e)
    

        if (pictureBox10.ImageLocation == @"icon1.png")
        
            pictureBox10.ImageLocation = @"icon.png";

        
        else
        
            pictureBox10.ImageLocation = @"icon1.png";
        



    

首先你必须初始化图像位置,然后使用两个 if 条件我认为这是主要问题使用 if else 无论如何,每个人都非常感谢@Draken

【讨论】:

以上是关于用图片框on_click c#切换图片框的图片的主要内容,如果未能解决你的问题,请参考以下文章

C# WinForm 当窗体控件图片过多时,切换界面的显示会发生闪烁,该怎么取消闪烁。(注:双缓冲开启了)

图片框的图像缩放

HTML网页设计中可自切换的动态图片框如何制作?

JavaScript练习---[JS动态切换图片效果;JS完成简易计算器, 下拉框切换头像, JS 制作简易文本编辑器]

微信小程序图片切换

Jquery导航悬停点击及首页图片切换功能