Intereting Posts
Как я могу сделать xmlserializer только сериализацией простого xml? Сильно типизированный ASP.NET MVC с платформой Entity Framework Lambda \ Anonymous Функция как параметр Как играть в фоновую музыку онлайн в Windows 8 Изменение имен свойств для сериализации Каков наилучший способ динамического внедрения интерфейса в C #? Документ, обработанный механизмом JRC, не может быть открыт в стеке C ++ Как сохранить пользовательское вмененное значение в TextBox? (WPF, XAML) Могу ли я получить поведение установки владельца формы WinForms с помощью hwnd / NativeWindow? Как добавить и получить значения заголовка в WebApi Ошибка TempData в ядре asp.net Промежуточные результаты в отчете RDLC Windows Phone 8.1 Инициализация камеры – отказ от доступа Почему в представлении метаданных VS не отображаются явные элементы интерфейса, реализованные в интерфейсе Как читать заголовки HTTP-запросов в веб-службе WCF?

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

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

Простой вариант – просто установить форму 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 } }); 

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

Это может быть или не быть применимым к вашей ситуации, но я использовал это в сочетании с событиями GotFocus для разных TextBox в моей форме, чтобы включить другое поведение, основанное на том, где пользователь нажал 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 .

 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», если это так, вы можете выполнить свое действие

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

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

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

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

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

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

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

 private void yourNameOfTextbox_KeyDown(object sender, KeyEventArgs e) { } 

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

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

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

ура! Фил

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

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

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

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

Вы можете заманить его на событие keyup http://www.itjungles.com/dotnet/c-how-to-easily-detect-enter-key-in-textbox-and-execute-a-method

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

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

В Visual Studio 2017, используя c #, просто добавьте атрибут AcceptButton к вашей кнопке, в моем примере «btnLogIn»:

 this.btnLogIn = new System.Windows.Forms.Button(); //....other settings this.AcceptButton = this.btnLogIn; 

TextBox вообще не получал ключ ввода в моей ситуации. Первое, что я попробовал, – это изменить ключ ввода во входной ключ, но я все равно получал звуковой сигнал системы при нажатии кнопки ввода. Итак, я подclassифицировал и перепробовал метод ProcessDialogKey () и отправил собственное событие, к которому я мог привязать обработчик кликов.

 public class EnterTextBox : TextBox { [Browsable(true), EditorBrowsable] public event EventHandler EnterKeyPressed; protected override bool ProcessDialogKey(Keys keyData) { if (keyData == Keys.Enter) { EnterKeyPressed?.Invoke(this, EventArgs.Empty); return true; } return base.ProcessDialogKey(keyData); } }