1

ログイン画面があり、パスワード テキスト ボックスで Enter キーを押したときに有効にしたいと考えています。問題は、それが機能しても、フォームを閉じると、アプリが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;

                }
}

この問題を解決するにはどうすればよいですか? ありがとう。

4

2 に答える 2

1

KeyDownテキストが変更されるたびに -EventHandlerを割り当てています。

private void textBox2_TextChanged(object sender, EventArgs e)
{
   textBox2.KeyDown += new KeyEventHandler(textBox2_KeyDown); // EVIL!
}

これは、テキスト ボックスにデータを入力する頻度が高いほど、より多くのイベント ハンドラーが割り当てられ、最終的に Enter キーを押すと何度も呼び出されることを意味します。イベントハンドラーを一度、つまりコンストラクターで割り当てると、これが機能するはずです。

于 2013-08-07T11:17:53.933 に答える