VB.NET定时器归0未触发Game Over提示问题求助
问题原因分析
- 判断计数归0的逻辑没有放在
Timer1_Tick事件中,计时器每次触发减1操作后不会执行归0校验,所以触发逻辑永远不会运行 - 重复声明了
over标签变量,第二次声明覆盖了第一次显示“GAME OVER”的标签,最终调用Show方法时展示的是文本为2的错误标签 - 直接将字符串类型的
Label1.Text和数字0做比较,存在类型隐式转换失败的风险 - 代码存在多余的
End Sub语法错误,会导致编译不通过
修复后的完整代码
控件初始化代码(建议放在窗体加载事件中)
Me.Controls.Add(time) time.Location = New Point(30, 150) time.BringToFront() ' 仅声明一次游戏结束提示标签 Dim over As New Label() With { .Font = New Font("Times New Roman", 13, FontStyle.Bold), .Height = 400, .Width = 400, .ForeColor = Color.Red, .Text = "GAME OVER. FAILED TO PRESS BUTTON" } Me.Controls.Add(over) over.Location = New Point(30, 100) over.BringToFront() over.Hide() ' 启动计时器 Timer1.Start()
Timer1_Tick事件代码
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ' 转换为整数运算避免类型错误 Dim currentCount As Integer = CInt(Label1.Text) currentCount -= 1 Label1.Text = currentCount.ToString() ' 归0校验逻辑放在Tick事件内,每次计数更新后自动检查 If currentCount = 0 Then Timer1.Stop() Label1.Hide() over.BringToFront() over.Show() End If End Sub
修复说明
- 把归0校验逻辑移到了
Timer1_Tick事件内部,每次计数更新后自动检查是否到0 - 删除了重复声明的错误
over标签,保留显示游戏结束提示的正确标签 - 新增了整数类型转换逻辑,避免字符串和数字比较的异常问题
- 清理了多余的无效
End Sub语法,保证代码可以正常编译运行
内容的提问来源于stack exchange,提问作者kylegreene123
相关产品推荐
相关产品推荐

