Как я могу переопределить кнопку по умолчанию на форме, когда фокус находится в TextBox - PullRequest
1 голос
/ 27 марта 2012

У меня есть форма winform, которая имеет типичные кнопки ОК и Отмена.

Кнопка ОК установлена ​​в качестве кнопки по умолчанию.Когда пользователь нажимает клавишу ВВОД, форма закрывается.

Форма также имеет текстовое поле с кнопкой поиска рядом с ней.Текстовое поле позволяет пользователю вводить текст для поиска, а кнопка «Поиск» запускает функцию поиска.

Я бы хотел, чтобы пользователь мог нажимать клавишу ВВОД, когда текстовое поле имеет фокус ввода и выполняет поиск.функция активации.

Проблема в том, что форма захватывает событие клавиши ВВОД до того, как его получает обработчик текстового поля.

РЕДАКТИРОВАТЬ: я пытался использовать следующие обработчики событий, но они никогдаполучить удар, и форма закрывается при нажатии клавиши Enter:

    private void txtFilter_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            Search();

            e.Handled = true;           
        }
    }

    private void txtFilter_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            Search();

            e.Handled = true;
        }
    }

Я также пытался включить свойство KeyPreview в форме и реализовать обработчик события KeyDown для формы, но клавиша Enter никогда не использоваласьПохоже, что любой из них будет поражен.

Каков наилучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 27 марта 2012

Попробуйте обработать события Enter и Leave TextBox, чтобы очистить свойство AcceptButton вашей формы:

private void txtFilter_Enter(object sender, EventArgs e) {
  this.AcceptButton = null;
}

private void txtFilter_Leave(object sender, EventArgs e) {
  this.AcceptButton = closeButton;
}

Тогда вы можете просто обработать ваше событие KeyUp как хотите:

private void txtFilter_KeyUp(object sender, KeyEventArgs e)
{
  if (e.KeyCode == Keys.Enter)
  {
    Search();         
  }
}
0 голосов
/ 27 марта 2012

Добавьте обработчик события KeyDown к textBox, а затем добавьте его в него

        if (e.KeyCode == Keys.Enter)
        {
            btnSearch.PerformClick();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...