点击进入C#时激活屏幕

时间:2013-08-07 11:15:29

标签: c#

我有一个登录屏幕,我想在密码文本框中输入时激活它。 问题是,即使它有效,当我关闭表单时,应用程序仍像按下一样,表单仍会无限循环打开。

这是我的代码:

  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;

                }
}

我如何解决这个问题? 感谢。

2 个答案:

答案 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;        
        }
    }
}