我目前正在制作登录系统,如果用户名或密码不正确,我想提供反馈。
以下是我正在阅读详细信息的文本文件的内容:
Ryan:password
Username:password
当我输入Ryan
和password
时,它工作正常并将我带到下一个表单。
但是,当我输入Username
和password
时,会出现'用户名不正确'首先是消息框,然后在我关闭该消息框之后,它将我带到下一个表单。
我希望它能直接将我带到下一个表单,而不会首先显示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");
}
}
}
}
答案 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