2010-09-20 14 views
38

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.Teclee la tecla presionó controlador de eventos

+0

nos muestras lo que has hecho hasta ahora? – tafa

+0

zack

+0

private void maskedtxtbox_KeyDown (remitente del objeto, System.Windows.Input.KeyEventArgs e) { if (e.SystemKey == System.Windows.Input.Key.Enter) {// hacer algo aquí – zack

Respuesta

74

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 
    } 
} 
+0

¿cómo lo hago para el cuadro de texto enmascarado? es un radmaskedtextbox – zack

+0

el radmaskedtextbox no da una opción de "Aceptar Retorno" dentro de la etiqueta ... – zack

+0

Nada sería diferente. MaskedTextBox tiene los mismos manejadores de eventos. De hecho, todos los controles los tienen. – tafa

6

El evento KeyDown sólo se activan en el cuadro de texto estándar o MaskedTextBox mediante teclas de entrada "normales", no ENTRAR o TAB y así sucesivamente.

Uno puede conseguir llaves especiales como ENTER reemplazando 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); 
    } 
} 

A continuación, se puede utilizar 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); 
      } 
    } 
} 
17

También puede utilizar PreviewKeyDown en WPF :

<TextBox PreviewKeyDown="EnterClicked" /> 

o en C#:

myTextBox.PreviewKeyDown += EnterClicked; 

Y luego, en la clase adjunto: propiedad

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

En WPF, elemento de cuadro de texto no tendrá oportunidad de utilizar "Enter" para crear KeyUp evento hasta que no se determinarán: 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.

He resuelto el problema de utilizar KeyUp Event del elemento TextBox mediante el uso de la estrategia de evento Bubble. Es corto y fácil. Deberá adjuntar un controlador KeyUp Evento de alguna (cualquiera) elemento padre:

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# parte lógica (manejador KeyUp evento está unido a un elemento de la red):

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:

Image with result

Cuestiones relacionadas