点击回车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;
                }
}

我该如何解决这个问题?谢谢

点击回车C#时激活屏幕

每次文本更改时都会分配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;        
        }
    }
}