Я хочу захватить текст из текстового поля при нажатии клавиши ввода. Я использую WPF/visual studio 2010/.NET 4. Я не знаю, какой обработчик событий будет использоваться в теге? Я также хочу сделать то же самое для maskedtextbox.
Введите ключевой обработчик события
Ответ 1
Либо 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
}
}
Ответ 2
Вы также можете использовать PreviewKeyDown в WPF:
<TextBox PreviewKeyDown="EnterClicked" />
или в С#:
myTextBox.PreviewKeyDown += EnterClicked;
И затем в прикрепленном классе:
void EnterClicked(object sender, KeyEventArgs e) {
if(e.Key == Key.Return) {
DoSomething();
e.Handled = true;
}
}
Ответ 3
Событие 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);
}
}
}
Ответ 4
В WPF элемент TextBox не получит возможность использовать кнопку "Enter" для создания события KeyUp, пока вы не установите свойство: AcceptsReturn = "True".
Но это не решит проблему с обработкой события KeyUp в элементе TextBox. После нажатия "Enter" вы получите новую текстовую строку в TextBox.
Я решил проблему с использованием элемента KeyUp Event из TextBox, используя стратегию событий Bubble. Это коротко и легко. Вы должны прикрепить обработчик события KeyUp в некотором (любом) родительском элементе:
XAML:
<Window x:Class="TextBox_EnterButtomEvent.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TextBox_EnterButtomEvent"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid KeyUp="Grid_KeyUp">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height ="0.3*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="1" Grid.Column="1" Padding="0" TextWrapping="WrapWithOverflow">
Input text end press ENTER:
</TextBlock>
<TextBox Grid.Row="2" Grid.Column="1" HorizontalAlignment="Stretch"/>
<TextBlock Grid.Row="4" Grid.Column="1" Padding="0" TextWrapping="WrapWithOverflow">
You have entered:
</TextBlock>
<TextBlock Name="txtBlock" Grid.Row="5" Grid.Column="1" HorizontalAlignment="Stretch"/>
</Grid></Window>
Логическая часть С# (обработчик событий 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);
}
}
}
}
РЕЗУЛЬТАТ: