点击回车C#时激活屏幕
本文关键字:激活 屏幕 回车 | 更新日期: 2023-09-27 18:26:46
我有一个登录屏幕,我想在密码文本框中按enter键时激活它。问题是,即使它有效,当我关闭表单时,应用程序的行为就像回车键仍然被按下,表单以无休止的循环打开。
这是我的代码:
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;
}
}
我该如何解决这个问题?谢谢
每次文本更改时都会分配KeyDown
-事件处理程序:
private void textBox2_TextChanged(object sender, EventArgs e)
{
textBox2.KeyDown += new KeyEventHandler(textBox2_KeyDown); // EVIL!
}
这意味着,你越频繁地将数据输入到文本框中,事件处理程序就会被分配得越多,当你最终点击回车键时,它就会被多次调用。将事件处理程序分配一次,即在构造函数中,这应该会起作用。
正如@bash.d所写的,您要多次分配事件,请执行一次(通过设计器或在构造函数中(在InitializeComponent
调用之后)或在Form_Load
事件中)
private void Form_Load(object sender, EventArgs e)
{
textBox2.KeyDown += new KeyEventHandler(textBox2_KeyDown);
}
此外,您还写道,您希望在用户单击enter后登录,因此您必须添加此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;
}
}
}