Не удается захватить клавишу ввода в текстовом поле WinForms - PullRequest
9 голосов
/ 28 ноября 2009

Когда пользователь вводит число в текстовое поле, я бы хотел, чтобы он мог нажимать Enter и имитировать нажатие кнопки Обновить в другом месте формы. Я искал это несколько мест в Интернете, и это, кажется, код, который я хочу, но он не работает. Когда данные помещены в текстовое поле и нажата клавиша Enter, все, что я получаю, - это динг. Что я делаю неправильно? (Visual Studio 2008)

private void tbxMod_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        btnMod.PerformClick();
    }
}

Ответы [ 7 ]

9 голосов
/ 28 ноября 2009

Вы уверены, что нажатие кнопки не выполняется? Я только что сделал тест, он отлично работает для меня. А вот способ предотвратить «дин» звук:

private void tbxMod_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        btnMod.PerformClick();
        e.SuppressKeyPress = true;
    }
}
5 голосов
/ 28 ноября 2009

Несколько мыслей:

  • имеет ли форма кнопку подтверждения (установленную на Form), которая может похитить ret
  • В текстовом поле включена проверка и происходит ли сбой? попробуйте отключить это
  • у чего-то включен предварительный просмотр ключа?
2 голосов
/ 16 марта 2011

В разделе «Свойства» формы.Категория (Разное) имеет следующие параметры:

AcceptButton, CancelButton, KeyPreview и ToolTip.

Установка кнопки AcceptButton для кнопки, которую вы хотите щелкнуть при нажатии Enter ключ должен сделать трюк.

1 голос
/ 05 апреля 2013

Я должен был объединить ответ Томаса и Марк. У меня был AcceptButton установленный на форме, поэтому мне пришлось сделать все это:

    private void tbxMod_Enter(object sender, EventArgs e)
    {
        AcceptButton = null;
    }

    private void tbxMod_Leave(object sender, EventArgs e)
    {
        AcceptButton = buttonOK;
    }

    private void tbxMod_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            // Click your button here or whatever
            e.Handled = true;
        }
    }

Я использовал t0mm13b e.Handled, хотя Томас e.SuppressKeyPress, похоже, тоже работает Я не уверен, в чем может быть разница.

1 голос
/ 28 ноября 2009

Установите e.Handled на true сразу после строки btnMod.PerformClick();.

Надеюсь, это поможет.

0 голосов
/ 05 сентября 2012

Простой приведенный ниже код работает просто отлично (при нажатии клавиши Enter, когда в textBoxPlatypusNumber отображается «UpdatePlatypusGrid () enter»); KeyPreview формы имеет значение false:

private void textBoxPlatypusNumber_KeyDown(object sender, KeyEventArgs e) {
    if (e.KeyCode == Keys.Enter)
    {
        UpdatePlatypusGrid(); 
    }
}

private void UpdatePlatypusGrid()
{
    MessageBox.Show("UpdatePlatypusGrid() entered");
}
0 голосов
/ 28 ноября 2009

свойства формы> установите KeyPreview в true

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