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
相关产品推荐
相关产品推荐

