Я работаю с приложением WinForm на С#, после ввода текста в текстовое поле я хочу нажать клавишу Enter, но текстовое поле все еще имеет фокус (мигающий курсор все еще находится в текстовом поле), как я могу это сделать?
С# Как нажать кнопку, нажав Enter, в то время как текстовое поле имеет фокус?
Ответ 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();
Ответ 9
Вы можете заманить его на событие keyup http://www.itjungles.com/dotnet/c-how-to-easily-detect-enter-key-in-textbox-and-execute-a-method
Ответ 10
Это очень актуально для WinForms. Однако в WPF вам нужно делать что-то по-другому, и это проще. Установите свойство IsDefault кнопки , относящейся к этой текстовой области, как истина.
Как только вы закончите запись ключа ввода, не забудьте переключить свойства соответственно.