input按键事件处理程序

input密钥时,我想从文本框中捕获文本。 我正在使用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 } } 

您也可以在WPF中使用PreviewKeyDown:

 <TextBox PreviewKeyDown="EnterClicked" /> 

或在C#中:

 myTextBox.PreviewKeyDown += EnterClicked; 

然后在所附的课堂上:

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

KeyDown事件只在标准的TextBox或MaskedTextBox上通过“普通”input键触发,而不是ENTER或TAB等。

通过重写IsInputKey方法,可以获得像ENTER一样的特殊键:

 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元素将不会获得使用“Enter”button创buildKeyUp事件的机会,除非您不设置属性:AcceptsReturn =“True”。

但是,它不能解决处理TextBox元素中的KeyUp事件的问题。 按“ENTER”后,您将在TextBox中获得新的文本行。

我已经使用Bubble事件策略解决了使用TextBox元素的KeyUp事件的问题。 这很简单。 您必须在某个(任何)父元素中附加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> 

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); } } } } 

结果:

图像与结果