Подтвердить что ты не робот

С# Как нажать кнопку, нажав Enter, в то время как текстовое поле имеет фокус?

Я работаю с приложением WinForm на С#, после ввода текста в текстовое поле я хочу нажать клавишу Enter, но текстовое поле все еще имеет фокус (мигающий курсор все еще находится в текстовом поле), как я могу это сделать?

4b9b3361

Ответ 1

Простой вариант - просто установить формы AcceptButton на кнопку, которую вы хотите нажать (обычно "ОК" и т.д.):

    TextBox tb = new TextBox();
    Button btn = new Button { Dock = DockStyle.Bottom };
    btn.Click += delegate { Debug.WriteLine("Submit: " + tb.Text); };
    Application.Run(new Form { AcceptButton = btn, Controls = { tb, btn } });

Если это не вариант, вы можете посмотреть событие KeyDown и т.д., но это больше работает...

    TextBox tb = new TextBox();
    Button btn = new Button { Dock = DockStyle.Bottom };
    btn.Click += delegate { Debug.WriteLine("Submit: " + tb.Text); };
    tb.KeyDown += (sender,args) => {
        if (args.KeyCode == Keys.Return)
        {
            btn.PerformClick();
        }
    };
    Application.Run(new Form { Controls = { tb, btn } });

Ответ 2

Обычный способ сделать это - установить Form AcceptButton на кнопку, которую вы хотите "щелкнуть". Вы можете сделать это либо в дизайнере VS, либо в коде, а AcceptButton можно изменить в любое время.

Это может быть или не быть применимым к вашей ситуации, но я использовал это в сочетании с событиями GotFocus для разных TextBox es в моей форме, чтобы включить другое поведение, основанное на том, где пользователь нажал Enter. Например:

void TextBox1_GotFocus(object sender, EventArgs e)
{
    this.AcceptButton = ProcessTextBox1;
}

void TextBox2_GotFocus(object sender, EventArgs e)
{
    this.AcceptButton = ProcessTextBox2;
}

При использовании этого метода нужно быть осторожным, так как вы не ставите AcceptButton на ProcessTextBox1, когда TextBox3 становится сфокусированным. Я бы рекомендовал использовать событие LostFocus на TextBox es, которое установило AcceptButton, или создать метод GotFocus, который содержит все элементы управления, которые не используют конкретный вызов AcceptButton.

Ответ 3

private void textBox_KeyDown(object sender, KeyEventArgs e)
{
     if (e.KeyCode == Keys.Enter)
     {
         button.PerformClick();
         // these last two lines will stop the beep sound
         e.SuppressKeyPress = true;
         e.Handled = true;
     }
}

Привяжите это событие KeyDown к текстовому полю, а затем, когда вы нажмете клавишу, это событие будет запущено. Внутри события мы проверяем, нажал ли пользователь "Enter key", если это так, вы можете выполнить свое действие

Ответ 4

Я столкнулся с этим, в то же время ищем то же самое, и я отмечаю, что ни один из перечисленных ответов не дает решения, когда вы не хотите нажимать "AcceptButton" в форме, когда вы входите.

Простым вариантом использования будет текстовое поле поиска на экране, где нажатие кнопки ввода должно 'click' кнопку "Поиск", а не выполнение поведения формы AcceptButton.

Этот маленький фрагмент сделает трюк;

private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 13)
    {
        if (!textBox.AcceptsReturn)
        {
            button1.PerformClick();
        }
    }
}

В моем случае этот код является частью пользовательского UserControl, полученного из TextBox, и элемент управления имеет свойство ClickThisButtonOnEnter. Но выше это более общее решение.

Ответ 5

Самое удобное для начинающих решение: 1. в своем Дизайнере щелкните текстовое поле, которое вы хотите, чтобы это произошло. В окне свойств (по умолчанию: внизу справа) нажмите на thunderbolt (События). Этот значок расположен рядом со значком в алфавитном порядке и значком свойств.

2. прокрутите вниз до keyDown. Нажмите на поле Выпадающее окно прямо к нему. Вы заметите, что там ничего нет, поэтому просто нажмите enter. Visual Studio напишет вам следующий код:

private void yourNameOfTextbox_KeyDown(object sender, KeyEventArgs e)
    {

    }

3. затем просто вставьте это между скобками:

if (e.KeyCode == Keys.Enter)
 {
     yourNameOfButton.PerformClick();
 }

это будет действовать так, как вы бы нажали на него.

ура! фил

Ответ 6

Просто установите форму " Принять кнопку" Свойство для кнопки, которую вы хотите нажать клавишей Enter. Или в событии нагрузки напишите this.acceptbutton = btnName;

Ответ 7

this.textboxName.KeyDown += (sender, args) => {
                if (args.KeyCode == Keys.Return)
                {
                    buttonName.PerformClick();
                }
            };

добавьте это в метод инициализации

Ответ 8

Или вы можете просто использовать этот простой 2-х линейный код:)

if (e.KeyCode == Keys.Enter)
            button1.PerformClick();

Ответ 10

Это очень актуально для WinForms. Однако в WPF вам нужно делать что-то по-другому, и это проще. Установите свойство IsDefault кнопки , относящейся к этой текстовой области, как истина.

Как только вы закончите запись ключа ввода, не забудьте переключить свойства соответственно.