You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用户名和密码数字长度验证失效问题排查求助

问题描述

我希望对用户名和密码的数字输入长度进行验证,当输入的数字位数超过设定的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:逻辑错误

  1. 长度判断后未限制输入:字符长度超过9位时,未阻止用户继续输入,应在添加字符前判断长度,或超过时截断文本。
  2. 错误的控件赋值:txt_UserName = txt_Password和txt_Password = txt_UserName是直接赋值控件对象,会导致控件引用混乱,应操作Text属性。
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:25:19