Введите ключевой обработчик события

Я хочу захватить текст из текстового поля при нажатии клавиши ввода. Я использую WPF / visual studio 2010 / .NET 4. Я не знаю, какой обработчик событий будет использоваться в теге? Я также хочу сделать то же самое для maskedtextbox.

Либо KeyDown, либо KeyUp.

TextBox tb = new TextBox(); tb.KeyDown += new KeyEventHandler(tb_KeyDown); static void tb_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { //enter key is down } } 

Вы также можете использовать PreviewKeyDown в WPF:

  

или в C #:

 myTextBox.PreviewKeyDown += EnterClicked; 

А затем в прилагаемом classе:

 void EnterClicked(object sender, KeyEventArgs e) { if(e.Key == Key.Return) { DoSomething(); e.Handled = true; } } 

Событие KeyDown запускается только в стандартном TextBox или MaskedTextBox с помощью «нормальных» клавиш ввода, а не ENTER или TAB и т. Д.

Вы можете получить специальные клавиши, такие как ENTER, переопределив метод IsInputKey:

 public class CustomTextBox : System.Windows.Forms.TextBox { protected override bool IsInputKey(Keys keyData) { if (keyData == Keys.Return) return true; return base.IsInputKey(keyData); } } 

Затем можно использовать событие KeyDown следующим образом:

 CustomTextBox ctb = new CustomTextBox(); ctb.KeyDown += new KeyEventHandler(tb_KeyDown); private void tb_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { //Enter key is down //Capture the text if (sender is TextBox) { TextBox txb = (TextBox)sender; MessageBox.Show(txb.Text); } } } 

В WPF элемент TextBox не получит возможность использовать кнопку «Ввод» для создания события KeyUp, пока вы не установите свойство: AcceptsReturn = «True».

Но это не решит проблему с обработкой события KeyUp в элементе TextBox. После нажатия «ENTER» вы получите новую текстовую строку в TextBox.

Я решил проблему с использованием элемента KeyUp Event из TextBox, используя страtagsю событий Bubble. Это коротко и легко. Вы должны присоединить обработчик события KeyUp в некотором (любом) родительском элементе:

XAML:

                  Input text end press ENTER:    You have entered:    

C # логическая часть (обработчик события KeyUp прикреплен к элементу сетки):

 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Grid_KeyUp(object sender, KeyEventArgs e) { if(e.Key == Key.Enter) { TextBox txtBox = e.Source as TextBox; if(txtBox != null) { this.txtBlock.Text = txtBox.Text; this.txtBlock.Background = new SolidColorBrush(Colors.LightGray); } } } } 

РЕЗУЛЬТАТ:

Изображение с результатом

  • Как работает свойство WPF Button.IsCancel?
  • WPF: объявления свойств XAML не устанавливаются через Setters?
  • Как сделать все элементы управления пропорционально пропорционально изменяемыми, когда окно максимизируется?
  • Копирование из и в буфер обмена теряет прозрачность изображения
  • Элементы управления диаграммой WPF
  • Изменение вида для ViewModel
  • В WPF, каковы различия между атрибутами x: Name и Name?
  • Копия файла изображения, используется другим процессом
  • MVVM: Учебник от начала до конца?
  • Стиль MenuItem со значком создает только один значок
  • Можно ли выбрать текстовый блок WPF?
  • Давайте будем гением компьютера.