如果没有与文本文件C#匹配,则使用MessageBox提供反馈#

时间:2017-12-01 10:31:20

标签: c# logic

我目前正在制作登录系统,如果用户名或密码不正确,我想提供反馈。

以下是我正在阅读详细信息的文本文件的内容:

Ryan:password
Username:password

当我输入Ryanpassword时,它工作正常并将我带到下一个表单。 但是,当我输入Usernamepassword时,会出现'用户名不正确'首先是消息框,然后在我关闭该消息框之后,它将我带到下一个表单。

我希望它能直接将我带到下一个表单,而不会首先显示Username不正确的MessageBox,即使我在第二行输入了详细信息。将来文本文件中会有更多行。

非常感谢任何帮助,谢谢!

以下是代码:

private void button1_Click(object sender, EventArgs e)
{
    string[] userdetails = File.ReadAllLines(AppDomain.CurrentDomain.BaseDirectory + "UserDetails.txt");
    foreach (string user in userdetails)
    {
        string[] splitDetails = user.Split(':');
        Login.username = splitDetails[0];
        Login.password = splitDetails[1];

        label1.Text = Login.username;
        label2.Text = Login.password;

        if ((txtUsername.Text == Login.username) && (txtPassword.Text == Login.password))
        {
            MessageBox.Show("Welcome " + Login.username);
            this.Hide();
            frmMainMenu menu = new frmMainMenu();
            menu.Show();
            break;
        }
        else
        {
            if ((txtUsername.Text == Login.username) && (txtPassword.Text != Login.password))
            {
                MessageBox.Show("Password incorrect");
                break;
            }
            if(txtUsername.Text != Login.username)
            {
                MessageBox.Show("Username incorrect");
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

在您的Senario中,如果您有100个用户(user1..user100) 你的代码是

for each line in file
  check if matches 
     if yes make new form 
     else complain it isnt a match

因此,对于user100,99,不匹配的消息将在每个非匹配之前显示一个。

你需要像这样编码

isfound=false
 for each line in file
   check if match  
     if yes set isfound and break

if isfound 
   show form blah
else
   whine not found

答案 1 :(得分:1)

逻辑错误。

问问自己,您何时应该停止查看凭据列表?

假设用户名是唯一的,我只看到一种情况可能会破坏你的循环,那就是"找到了用户名"。

只要在列表中找到输入用户名,就会知道循环必须中断。然后,您只需检查密码是否正确。

如果密码正确,您可以打开新窗口并POST您的功能,它已完成其工作。

在循环之后,你把你的MessageBox和一条消息放在一起,这取决于是否找到了用户名。

return