我有一个登录屏幕,我想在密码文本框中输入时激活它。 问题是,即使它有效,当我关闭表单时,应用程序仍像按下一样,表单仍会无限循环打开。
这是我的代码:
private void textBox2_TextChanged(object sender, EventArgs e)
{
textBox2.KeyDown += new KeyEventHandler(textBox2_KeyDown);
}
public void textBox2_KeyDown(object sender, KeyEventArgs e)
{
if (user == Username[1] && pass == passwords[1])
{
MessageBox.Show("Login successfull", "Welcome, HR");
UpdateDBForm newEmployee = new UpdateDBForm();
this.Hide();
newEmployee.ShowDialog();
return;
}
}
我如何解决这个问题? 感谢。
答案 0 :(得分:1)
每次文字更改时,您都要分配KeyDown
- EventHandler:
private void textBox2_TextChanged(object sender, EventArgs e)
{
textBox2.KeyDown += new KeyEventHandler(textBox2_KeyDown); // EVIL!
}
这意味着,您在文本框中输入数据的次数越多,分配的事件处理程序就越多,当您最终点击输入时,它将被多次调用。 分配一次事件处理程序,即在构造函数中,这应该有效。
答案 1 :(得分:1)
正如@bash.d所写的那样,你多次分配事件,做一次(由设计师或构造函数(在InitializeComponent
调用之后)或在Form_Load
事件中)
private void Form_Load(object sender, EventArgs e)
{
textBox2.KeyDown += new KeyEventHandler(textBox2_KeyDown);
}
您也写过要在用户点击输入后登录,因此您必须添加此if
:
public void textBox2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (user == Username[1] && pass == passwords[1])
{
MessageBox.Show("Login successfull", "Welcome, HR");
UpdateDBForm newEmployee = new UpdateDBForm();
this.Hide();
newEmployee.ShowDialog();
return;
}
}
}