我正在构建一个Windows表单应用程序,它将员工信息记录存储在数据库中,包括SSN。在请求输入SSN的文本框旁边,我有一个复选框,当单击时,显示完整的SSN而不是最后四位数。为了确保只有管理员访问此信息,我创建了一个连接到MS SQL DB的提示表单,该表单存储管理员密码,并且出于安全目的要求用户输入密码。此外,我希望能够在需要时调用此表单。我成功实现了它,但想添加一个允许3次尝试的功能。有没有办法停止程序执行并继续提示用户输入textBox?
output是一个变量,用于存储获取密码的“SELECT”查询的结果。
确认是接受按钮。
我想到强制输入的唯一选择是调用一个新表单。唯一的问题是,这个代码在表单中,我的直觉告诉我,这不是这个问题的答案。我肯定错过了什么。
confirmation.Click += (sender, e) => {
//If Password is correct.
if (textBox.Text == output)
{
isCorrect = true;
Pprompt.Close();
}
else
{
isCorrect = false;
//While the password is incorrect.
while (isCorrect == false)
{
//textBox.Text = "";
if (textBox.Text == output)
{
isCorrect = true;
Pprompt.Close();
break;
}
tryCount++;
if (tryCount == 3)
{
MessageBox.Show("Access Denied.");
break;
}
}
}
}
我想要发生的是表单在超过尝试限制之前一直要求我输入。
您不能在单击处理程序中使用循环,因为UI在运行时冻结,并且用户没有机会进行任何输入。当用户再次单击该按钮时,只处理一个条目并处理下一个条目。
confirmation.Click += (sender, e) => {
if (textBox.Text == output) // Password is correct.
{
isCorrect = true;
Pprompt.Close();
}
else
{
isCorrect = false;
textBox.Text = "";
tryCount++;
if (tryCount == 3)
{
MessageBox.Show("Access Denied.");
Pprompt.Close();
}
}
}
除非您使用多线程或async
/ await
,否则以下情况属实: