C# QuizApp计时结束后ShowQuestion()方法无法正常触发
问题分析与修复:WinForms QuizApp计时器结束后无法显示下一题
问题描述
在C# WinForms开发的QuizApp中,ShowQuestion()方法在点击选项按钮时能正常切换题目,但计时器计时结束后,无法触发下一题显示。即使将自定义的CustomTimeBox替换为MessageBox,问题仍然存在。
核心问题
对比按钮点击的处理逻辑,计时器超时的Timer_Tick方法存在两个关键缺失:
- 未递增题目索引:按钮点击时会先执行
questionIndex++再调用ShowQuestion(),而计时器超时逻辑中没有这一步,导致ShowQuestion()仍然显示当前题目,视觉上无变化。 - 未重启计时器:按钮点击完成后会重新启动计时器,而超时逻辑中调用
ShowQuestion()后没有启动计时器,下一题无法进入计时流程。
另外,CustomTimeBox在每次Tick事件中都实例化,属于不必要的资源浪费。
修复后的代码
private void Timer_Tick(object sender, EventArgs e) { time -= 1; lblTimer.Text = $"Kalan süre: {time} saniye"; if (time == 0) { timer.Stop(); // 超时未答,标记为错误(可根据需求调整) countIncorrect++; // 递增题目索引,切换到下一题 questionIndex++; CustomTimeBox customTimeBox = new CustomTimeBox(); if (customTimeBox.ShowDialog() == DialogResult.OK) { ShowQuestion(); // 重新启动计时器,为下一题计时 timer.Start(); } } }
关键修复点说明
- 将
CustomTimeBox的实例化移到time == 0的分支内,避免不必要的对象创建 - 超时后先更新答题统计(
countIncorrect++)并递增questionIndex,确保ShowQuestion()加载下一题 - 调用
ShowQuestion()后重启计时器,保证下一题的计时功能正常运行 - 如果业务需求中超时不算错误,可移除
countIncorrect++代码
验证要点
- 测试计时器超时后,是否正确切换到下一题
- 确认下一题的计时器正常开始倒计时
- 所有题目完成后,是否正确显示结束统计弹窗
内容的提问来源于stack exchange,提问作者Yunus Emre Çağan
相关产品推荐
相关产品推荐

