You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

A级扫雷项目:按钮点击无法切换背景图像问题排查

问题原因及解决方法

问题根源

你的代码无法切换图像,核心原因是**Is运算符比较的是对象引用**,而每次访问My.Resources.bombsearchplain或My.Resources.bombsearchflag时,都会返回一个全新的Image对象实例。这意味着按钮的BackgroundImage和你从资源里直接取的对象永远不是同一个引用,导致所有条件判断都不触发,图像自然不会变化。

解决方案

有两种常见的修复方式:

方式1:缓存资源图像到变量

提前在类的级别声明变量缓存资源图像,避免每次访问My.Resources生成新实例:

' 在类的顶部声明变量(比如Form类里)
Private plainImage As Image = My.Resources.bombsearchplain
Private flagImage As Image = My.Resources.bombsearchflag

' 按钮点击事件中的代码修改为:
If buttonClicked.BackgroundImage Is plainImage Then
    buttonClicked.BackgroundImage = flagImage
    If buttonArray(currentX, currentY) = 1 Then
        correctFlags += 1
    End If
ElseIf buttonClicked.BackgroundImage Is flagImage Then
    buttonClicked.BackgroundImage = plainImage
    If buttonArray(currentX, currentY) = 1 Then
        correctFlags -= 1
    End If
End If

方式2:用Tag标记按钮状态

给按钮的Tag属性赋值来记录当前状态,绕过对象引用比较的问题:

' 初始化按钮时设置初始Tag(比如创建按钮时)
buttonClicked.Tag = "plain"
buttonClicked.BackgroundImage = My.Resources.bombsearchplain

' 点击事件中的代码:
If buttonClicked.Tag.ToString() = "plain" Then
    buttonClicked.BackgroundImage = My.Resources.bombsearchflag
    buttonClicked.Tag = "flag"
    If buttonArray(currentX, currentY) = 1 Then
        correctFlags += 1
    End If
ElseIf buttonClicked.Tag.ToString() = "flag" Then
    buttonClicked.BackgroundImage = My.Resources.bombsearchplain
    buttonClicked.Tag = "plain"
    If buttonArray(currentX, currentY) = 1 Then
        correctFlags -= 1
    End If
End If

内容的提问来源于stack exchange,提问作者Tom Mitchell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:37:05