用户名和密码数字长度验证失效问题排查求助
问题描述
我希望对用户名和密码的数字输入长度进行验证,当输入的数字位数超过设定的9位限制时,系统却始终提示输入有效,无法触发错误提示。
原代码
private void button5_Click_1(object sender, EventArgs e) // 自定义数字键盘的按键事件 { if (txt_Username.Enabled == true) { txt_Username.Text += ((System.Windows.Forms.Button)sender).Text; if (txt_UserName.Text.Length > 9) { txt_Username.Enabled = true; label6.ForeColor = Color.Red; label6.Text = "用户名最多只能输入9位数字"; txt_nomeUtente.Focus(); } else { txt_Username.Enabled = true; label6.ForeColor = Color.Green; label6.Text = "用户名格式有效"; txt_Password.Focus(); } } else if (txt_Password.Enabled == true) { txt_Password.Text += ((System.Windows.Forms.Button)sender).Text; if (txt_Password.Text.Length > 9) { txt_Password.Enabled = true; label7.ForeColor = Color.Red; label7.Text = "密码最多只能输入9位数字"; txt_nomeUtente.Focus(); } else { txt_Password.Enabled = true; label7.ForeColor = Color.Green; label7.Text = "密码格式有效"; txt_Password.Focus(); } } } private void button15_Click_1(object sender, EventArgs e) // 自定义数字键盘的ENTER键事件 { if (String.IsNullOrEmpty(txt_UserName.Text)) { txt_UserName.Enabled = true; txt_Password.Enabled = false; label6.ForeColor = Color.Red; label6.Text = "用户名不能为空"; txt_User.Focus(); //txt_UserName = txt_Password; } else { txt_UserName.Enabled = true; txt_Password.Enabled = true; label6.ForeColor = Color.Green; label6.Text = "用户名格式有效"; txt_Password.Focus(); txt_UserName = txt_Password; } if (String.IsNullOrEmpty(txt_Password.Text)) { txt_Password.Enabled = true; label7.ForeColor = Color.Red; label7.Text = "密码不能为空"; label6.Text = ""; txt_Password.Focus(); } else { txt_Password.Enabled = true; txt_UserName.Enabled = true; label7.ForeColor = Color.Green; label7.Text = "密码格式有效"; txt_Password = txt_UserName; txt_UserName.Focus(); } }
问题分析与修复
核心问题1:控件名拼写不一致
原代码中存在多处控件名拼写错误:
- 在
button5_Click_1中,文本添加到txt_Username,但判断长度时用的是txt_UserName.Text.Length,两个控件名不匹配,导致判断的不是实际输入内容。 - 错误使用
txt_nomeUtente.Focus()、txt_User.Focus(),这些控件名应为txt_Username或txt_Password。
核心问题2:逻辑错误
- 长度判断后未限制输入:字符长度超过9位时,未阻止用户继续输入,应在添加字符前判断长度,或超过时截断文本。
- 错误的控件赋值:
txt_UserName = txt_Password和txt_Password = txt_UserName是直接赋值控件对象,会导致控件引用混乱,应操作Text属性。 - ENTER键逻辑顺序错误:第二个
if判断会覆盖第一个if的提示,比如用户名为空时,第二个if会继续判断密码为空,清除用户名的错误提示,需调整判断逻辑。
修复后的代码
private void button5_Click_1(object sender, EventArgs e) // 自定义数字键盘的按键事件 { var buttonText = ((System.Windows.Forms.Button)sender).Text; if (txt_Username.Enabled) { // 添加前判断长度,超过9位则不添加 if (txt_Username.Text.Length < 9) { txt_Username.Text += buttonText; label6.ForeColor = Color.Green; label6.Text = "用户名格式有效"; } else { label6.ForeColor = Color.Red; label6.Text = "用户名最多只能输入9位数字"; } txt_Username.Focus(); // 保持聚焦在当前输入框 } else if (txt_Password.Enabled) { if (txt_Password.Text.Length < 9) { txt_Password.Text += buttonText; label7.ForeColor = Color.Green; label7.Text = "密码格式有效"; } else { label7.ForeColor = Color.Red; label7.Text = "密码最多只能输入9位数字"; } txt_Password.Focus(); } } private void button15_Click_1(object sender, EventArgs e) // 自定义数字键盘的ENTER键事件 { // 先判断用户名 if (string.IsNullOrEmpty(txt_Username.Text)) { label6.ForeColor = Color.Red; label6.Text = "用户名不能为空"; label7.Text = ""; txt_Username.Focus(); txt_Password.Enabled = false; return; } // 用户名有效,判断密码 if (string.IsNullOrEmpty(txt_Password.Text)) { label7.ForeColor = Color.Red; label7.Text = "密码不能为空"; label6.Text = ""; txt_Password.Focus(); txt_Password.Enabled = true; return; } // 两者都有效 label6.ForeColor = Color.Green; label6.Text = "用户名格式有效"; label7.ForeColor = Color.Green; label7.Text = "密码格式有效"; // 这里可以添加后续逻辑,比如提交验证 }
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

