如何比较变量与PictureBox图像

时间:2015-10-28 11:37:13

标签: .net vb.net image visual-studio picturebox

    If PictureBox1.Image = "a.png" Then
        PictureBox1.Image = My.Resources.b
    Else
        PictureBox1.Image = My.Resources.a
    End If

它不会起作用。我如何使这个东西工作?它应检查图片框是否显示图片 a ,如果是,则将其显示为图片 b

Public Class Form1
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
        If PictureBox1.Image Is My.Resources.b Then
            PictureBox1.Image = My.Resources.a
            PictureBox1.Refresh()
        Else
            PictureBox1.Image = My.Resources.b
            PictureBox1.Refresh()
        End If
    End Sub
End Class

完整的代码

1 个答案:

答案 0 :(得分:1)

ImageSystem.Drawing.Image类型的属性,而"a.png"是一个字符串,因此您无法比较这些内容以查看它们是否相等。

同样Image是引用类型,因此您必须使用Is将其与其他引用类型进行比较。

以下可能有效:

If PictureBox1.Image Is My.Resources.a Then
    PictureBox1.Image = My.Resources.b
Else
    PictureBox1.Image = My.Resources.a
End If

注意:比较图像可能很棘手,因为当您设置Image属性时,它实际上可能会创建原始图像的副本,因此稍后进行比较将不起作用。见How to compare Image objects with C# .NET?

因此,考虑到这一点,使用变量来比较状态会更好,因为这会消耗更少的资源,并且比必须比较图像简单得多。

以下内容适用于您:

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Static showImageA As Boolean
    showImageA = Not showImageA

    If showImageA Then
        PictureBox1.Image = My.Resources.a
    Else
        PictureBox1.Image = My.Resources.b
    End If
End Sub

注意:请确保您具有Option Strict和Option Explicit On,因为您执行此操作时发布的代码无法编译,因此向您指出错误。