密码长度验证逻辑异常:首次错误后正确输入仍报错
问题分析与解决
需求说明
实现密码长度验证功能:用户在密码文本框输入密码时,若长度不足10字符则显示错误提示;若长度≥10字符则接受密码并打开GameForm窗体。
问题现象
当前程序可显示错误提示,但首次输入错误后,后续输入符合长度要求的密码仍会弹出错误提示信息。
现有代码
private void button2_Click(object sender, EventArgs e) { PasswordRestrictions.Hide(); if (NewPassword.Text.Length <= 10) { MessageBox.Show("Your password must be atleast 10characters long"); } if (NewPassword.Text.Length >= 10) { this.Hide(); var gameForm = new GameForm(); gameForm.Closed += (s, args) => this.Close(); gameForm.Show(); } }
问题根源
代码中两个if语句是独立判断的,存在逻辑冲突:
- 当密码长度等于10时,
<=10和>=10两个条件同时成立,会先弹出错误提示,再执行打开窗体的逻辑,让你误以为验证未通过。 - 即使后续输入符合要求的10位密码,第一个
if的条件依然会触发,导致错误提示重复出现。
修正方案
调整条件判断逻辑,使用互斥分支确保同一时间只执行一个验证结果:
private void button2_Click(object sender, EventArgs e) { PasswordRestrictions.Hide(); // 仅当密码长度不足10时显示错误 if (NewPassword.Text.Length < 10) { MessageBox.Show("密码长度必须至少10个字符"); } // 长度符合要求时打开GameForm else { this.Hide(); var gameForm = new GameForm(); gameForm.Closed += (s, args) => this.Close(); gameForm.Show(); } }
修正要点
- 将第一个判断条件从
<=10改为<10,精准匹配“长度不足10字符”的需求场景。 - 使用
else替代第二个独立if,让两个分支互斥,避免同时执行错误提示和窗体打开逻辑。
内容的提问来源于stack exchange,提问作者Fuzz
相关产品推荐
相关产品推荐

