3 回答
TA贡献1860条经验 获得超9个赞
我想这只是为了学习目的或应该保持简单的作业,否则根本不安全。
您不需要使用循环。目前,您的循环循环会一一检查所有节点,对于与给定用户/密码不匹配的每个节点,都会显示消息框,这就是为什么您会看到消息框,直到循环到达正确的用户/密码为止。
在不使用循环的情况下,您可以通过这种方式轻松检查给定的用户/密码是否存在于您的 xml 文件中:
var userName = userNameTextBox.Text;
var password = passwordTextBox.Text;
var match = System.Xml.Linq.XElement.Load(@"d:\users.xml")
.Elements("user")
.Where(x => x.Element("name")?.Value == userName &&
x.Element("password")?.Value == password)
.Any();
然后如果match不是真的,你可以显示消息框。
TA贡献1784条经验 获得超2个赞
问题是每次检查 XML 中不匹配的条目时都会显示消息框。
对代码进行最少更改的最简单方法如下:
private void button4_Click(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load("dati.txt");
bool found = false;
foreach (XmlNode node in doc.SelectNodes("//user"))
{
String User = node.SelectSingleNode("name").InnerText;
String Pass = node.SelectSingleNode("password").InnerText;
if (User == textBox1.Text && Pass == textBox2.Text)
{
found = true;
break;
}
}
if (found)
{
button1.Visible = true;
dlt_btn.Visible = true;
button3.Visible = true;
button3.Visible = true;
button5.Visible = true;
}
else
{
MessageBox.Show("Invalid Username or Password!");
}
}
我们创建一个名为的变量found并将其设置为false. 这是为了确保如果 XML 为空或没有匹配项,我们将无法通过检查。
然后我们遍历结果并设置found = true是否找到匹配项。我们调用 break 来跳出循环。
循环完成后,我们检查局部变量是否为真:
if (found)
这是简写 if (found == true)
如果这是真的,那么我们会像以前一样启用您的按钮。如果它不正确,那么我们将显示错误消息。
它只会显示一次错误消息。
TA贡献1851条经验 获得超4个赞
这是一个解决方案,有效:
private void button4_Click(object sender, EventArgs e)
{
string username;
string password;
string CurrentUser = "";
string CurrentPwd = "";
bool LoginStatus = false;
username = textBox1.Text;
password = textBox2.Text;
XmlDocument xmxdoc = new XmlDocument();
xmxdoc.Load("dati.txt");
XmlNodeList xmlnodelist = xmxdoc.GetElementsByTagName("user");
foreach (XmlNode xn in xmlnodelist)
{
XmlNodeList xmlnl = xn.ChildNodes;
foreach (XmlNode xmln in xmlnl)
{
if (xmln.Name == "name")
{
if (xmln.InnerText == username)
{
CurrentUser = username;
}
}
if (xmln.Name == "password")
{
if (xmln.InnerText == password)
{
CurrentPwd = password;
}
}
}
if ((CurrentUser != "") & (CurrentPwd != ""))
{
LoginStatus = true;
}
}
if (LoginStatus == true)
{
button1.Visible = true;
dlt_btn.Visible = true;
button3.Visible = true;
button3.Visible = true;
button5.Visible = true;
return;
}
else
{
MessageBox.Show("Invalid Username or Password!");
}
}
- 3 回答
- 0 关注
- 193 浏览
添加回答
举报