Xamarin.Forms Entry猜谜功能故障排查:成功提示不显示及3次尝试逻辑异常
问题分析与修复方案
嘿,我帮你揪出代码里的两个关键问题,这就是为啥成功提示出不来、次数限制也没生效的原因:
1. 计数器每次都被重置,次数限制完全失效
你把int CompteurEnigme = 0;放在了Entry_Completed方法内部,每次用户提交答案,这个计数器都会被重新设为0。也就是说,用户答多少次,计数器永远都是从0开始——既不会累计错误次数,也触发不了3次答错的剧情,甚至会干扰答对的判断逻辑。
2. While循环逻辑错误,无法正确处理单次提交
Entry_Completed是用户提交一次答案就触发一次的方法,你用了while循环,这就导致:
- 如果用户第一次答错,循环会直接连续弹出3次错误提示(因为计数器在循环里快速增加到3),根本不给用户重新输入的机会;
- 如果用户答对了,虽然while不会执行,但因为计数器每次重置,看似没问题,但如果用户是第二次答对,逻辑也不会识别到之前的错误次数。
修正后的完整代码
第一步:把计数器移到类的成员变量,保存错误次数
先在你的页面类里定义计数器(放在方法外面,作为类的成员):
// 放在页面类的顶部,作为成员变量 private int _compteurEnigme = 0;
第二步:重构Entry_Completed方法的逻辑
去掉while循环,改成单次判断的逻辑——因为每次提交只需要处理当前的答案:
public void Entry_Completed(object sender, EventArgs e) { // 先处理输入,Trim去掉前后空格避免误判 var reponseEnigme01 = Enigme01.Text?.Trim(); string soluce1 = "chaussette"; // 优先判断是否答对 if (string.Equals(reponseEnigme01, soluce1, StringComparison.OrdinalIgnoreCase)) { Reponse04.Text = "Bravo, vous avez donné la bonne réponse et la porte s'ouvre."; Reponse04.IsVisible = true; Enigme01.IsEnabled = false; // 答对后禁用输入,防止重复提交 return; // 直接返回,不执行后面的错误逻辑 } // 答错的情况,累计次数 _compteurEnigme++; if (_compteurEnigme >= 3) { Reponse04.TextColor = Color.DarkRed; Reponse04.Text = "A force de cogiter pour trouver la réponse, vous ne voyez pas les gardes arriver. Ils vous attrapent et finisser ainsi votre carrière d'aventurier dans une geôle."; Reponse04.IsVisible = true; Enigme01.IsEnabled = false; // 用完3次机会后禁用输入 } else { // 提示剩余次数,更友好 DisplayAlert("Info:", $"Mauvaise réponse, il vous reste {3 - _compteurEnigme} essais.", "ok"); } }
额外优化说明
- 给输入内容加了
Trim(),避免用户输入前后空格导致判断错误; - 用
StringComparison.OrdinalIgnoreCase做比较,让答案不区分大小写(如果不需要可以删掉这个参数); - 答对或用完次数后禁用输入框,防止用户重复提交无效内容。
这样修改后,就能完美实现你的需求:
- 累计错误次数,最多允许3次尝试;
- 答错时清晰提示剩余次数;
- 答对时正常显示成功剧情;
- 用完次数或答对后,输入框自动禁用,避免无效操作。
内容的提问来源于stack exchange,提问作者Julien
相关产品推荐
相关产品推荐

