我正在构建一个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;
}
}
}
}
我想让表单不断询问我输入,直到超出尝试限制为止。
答案 0 :(得分:1)
单击处理程序中不能包含循环,因为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
,否则以下内容是正确的: