2010-08-04 22 views
13

Quiero simular la entrada del usuario a un WPF TextBox. Quiero ingresar un carácter de modo que se active el evento OnPreviewTextInput. He intentado fijar el texto a través de la propiedad de texto, pero esto no provocó el evento:¿Cómo simulo la entrada de texto a un WPF TextBox?

public void SomeFunction() 
{ 
    var textBox = new TextBox(); 
    textBox.Text = "A";      
} 

¿Puedo activar el evento de alguna manera explícita?

Respuesta

21

Consulte la respuesta al How can I programmatically generate keypress events in C#? para obtener una buena descripción de cómo simular eventos de entrada.

También podría hacer:

TextCompositionManager.StartComposition(
    new TextComposition(InputManager.Current, textBox, "A")); 

Esto elevará el caso PreviewTextInput y luego provocar el evento TextInput y cambiar el texto.

+0

Gracias! ¡Justo lo que necesitaba! – stiank81

+0

¿Qué hay de retroceso? – Jordan

+5

@Jordan: Deberías simplemente preguntar eso como una nueva pregunta. Es posible que esté buscando algo como 'EditingCommands.Backspace.Execute (null, textBox);', pero es difícil de decir sin más detalles. – Quartermeister

4

Otra forma de hacerlo sería mediante el uso de API de Windows, SendMessage para ser específicos:

[DllImport("user32.dll")] 
public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam); 

Entonces llaman de esta manera, cuando la atención se centra en el cuadro de texto:

SendMessage(new WindowInteropHelper(this).Handle, 0x0102, 72, 0) 

0x0102 es el valor constante para WM_CHAR y 72 es el código clave para H (puede cambiar esto en consecuencia).

+1

Gracias por compartir, pero creo que la solución Quartermeisters es más simple y más limpia. – stiank81

+0

Siempre es bueno saber más de una posible solución. –

+0

Sí, claro! Es por eso que te di un +1 :-) – stiank81

Cuestiones relacionadas