una teclado tecla tag presionar presionada eventos evento detectar c# wpf user-interface textbox maskedtextbox

c# - teclado - Ingrese el controlador de eventos presionado por la tecla



eventos textbox c# (4)

El evento KeyDown solo se desencadena en el TextBox estándar o MaskedTextBox con las teclas de entrada "normales", no con ENTER ni TAB, y así sucesivamente.

Uno puede obtener teclas especiales como INTRO al anular el método IsInputKey:

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

Entonces uno puede usar el evento KeyDown de la siguiente manera:

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

Quiero capturar el texto del cuadro de texto cuando se pulsa la tecla Intro. Estoy usando WPF / visual studio 2010 / .NET 4. ¿No sé qué controlador de eventos usar en la etiqueta? También quiero hacer lo mismo para maskedtextbox.


En WPF, el elemento TextBox no tendrá la oportunidad de usar el botón "Enter" para crear KeyUp Event hasta que no establezca la propiedad: AcceptsReturn = "True".

Pero no resolvería el problema con el manejo del evento KeyUp en el elemento TextBox. Después de presionar "ENTER" obtendrá una nueva línea de texto en TextBox.

Resolví el problema de usar KeyUp Event del elemento TextBox usando la estrategia de evento Bubble. Es corto y fácil. Tiene que adjuntar un controlador de eventos de KeyUp en algún elemento principal (cualquiera):

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>

Parte lógica C # (controlador de eventos KeyUp está conectado a un elemento de la grilla):

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

RESULTADO:

Imagen con resultado


También puede usar PreviewKeyDown en WPF:

<TextBox PreviewKeyDown="EnterClicked" />

o en C #:

myTextBox.PreviewKeyDown += EnterClicked;

Y luego en la clase adjunta:

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


Ya sea KeyDown o 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 } }