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

C# WinForms登录验证:实现3次尝试失败后关闭程序

解决C# WinForms登录3次尝试限制的问题

你的核心问题是把尝试次数的计数逻辑放在了遍历账户的foreach循环内部,导致每检查一个账户就会累加一次尝试次数(比如文件里有8个账户,一次错误登录就会触发8次计数),而正确的逻辑应该是每次点击登录按钮算一次尝试,和文件中账户数量无关。

正确实现步骤

  1. 在窗体类中定义一个类级别的变量,用来记录登录尝试次数,初始值为0。
  2. 在登录按钮的点击事件中,先读取文件并遍历账户信息完成验证,遍历结束后再根据验证结果更新尝试次数并给出对应提示。

示例代码

// 窗体类级别变量,记录登录尝试次数
private int loginAttempts = 0;

private void btnLogin_Click(object sender, EventArgs e)
{
    // 获取用户输入的账号密码
    string inputUser = txtUsername.Text.Trim();
    string inputPwd = txtPassword.Text.Trim();
    bool isAuthenticated = false;

    // 读取文件中的账户信息
    string[] lines = File.ReadAllLines("accounts.txt");
    foreach (string line in lines)
    {
        string[] account = line.Split('|');
        // 假设文件格式为「用户名|密码」
        if (account.Length == 2 && account[0] == inputUser && account[1] == inputPwd)
        {
            isAuthenticated = true;
            break; // 找到匹配账户,直接跳出循环
        }
    }

    // 根据验证结果处理逻辑
    if (isAuthenticated)
    {
        // 登录成功,重置尝试次数,执行后续操作(如打开主窗体)
        loginAttempts = 0;
        MessageBox.Show("登录成功!");
        // new MainForm().Show();
        // this.Hide();
    }
    else
    {
        loginAttempts++;
        switch (loginAttempts)
        {
            case 1:
                MessageBox.Show("错误:还有2次尝试机会");
                break;
            case 2:
                MessageBox.Show("错误:还有1次尝试机会");
                break;
            case 3:
                MessageBox.Show("错误:尝试次数过多");
                this.Close();
                break;
        }
    }
}

关键说明

  • 尝试次数变量loginAttempts是窗体类成员,仅在每次登录验证失败后累加一次,完全独立于账户遍历过程。
  • foreach循环只负责完成账号密码的匹配检查,验证完成后统一处理尝试次数逻辑,避免了循环内计数导致的次数异常。
  • 登录成功后重置尝试次数,防止用户后续再次登录失败时延续之前的错误计数。

内容的提问来源于stack exchange,提问作者Hassan Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:01:03