Событие нажатия клавиши застряло в бесконечном цикле - PullRequest
0 голосов
/ 24 января 2019

У меня есть кнопка, которая при нажатии 'enter' отображала бы MessageBox, и если вы нажмете Enter еще раз, чтобы закрыть MessageBox, она перейдет в бесконечный цикл.Как игнорировать событие запуска нескольких ключей в MessageBox?

this.okButton.KeyUp += new KeyEventHandler(this.okButton_KeyUp);

private void okButton_KeyUp(object sender, KeyEventArgs e)
{
    if (e.Handled) { return; }
    if (e.KeyCode == Keys.Enter && okButton.Enabled)
    {
        okButton_Click(null, null);
        e.Handled = true;
    }
}

private void okButton_Click(object sender, EventArgs e)
{
    MessageBox.Show("Hello World", "", MessageBoxButtons.OK);
}

1 Ответ

0 голосов
/ 25 января 2019

Это вполне желаемое поведение.Что происходит,

  1. Во время события Key Down окно сообщения закрывается.
  2. Во время события Key Up окно сообщения открывается снова.

То, что вы можете сделать здесь, это удалить событие KeyUp Button и вместо этого напрямую полагаться на событие Click.Каждый раз, когда вы нажимаете Enter с фокусом на кнопке, происходит событие Click.

Это обеспечит вам требуемое поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...