2010-08-04 4 views
13

Je souhaite simuler une entrée utilisateur dans une zone de texte WPF. Je veux entrer un caractère tel que l'événement OnPreviewTextInput est déclenché. J'ai essayé de placer le texte à travers la propriété Text, mais cela n'a pas déclenché l'événement:Comment simuler une entrée de texte dans un TextBox WPF?

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

Puis-je déclencher l'événement explicitement en quelque sorte?

Répondre

21

Voir la réponse à How can I programmatically generate keypress events in C#? pour une bonne description de la façon de simuler des événements d'entrée.

Vous pouvez également faire:

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

Cela augmentera l'événement PreviewTextInput puis déclencher l'événement TextInput et changer le texte.

+0

Merci! Juste ce dont j'avais besoin! – stiank81

+0

Qu'en est-il du retour arrière? – Jordan

+5

@Jordan: Vous devriez simplement poser cette question comme une nouvelle question. Vous cherchez peut-être quelque chose comme 'EditingCommands.Backspace.Execute (null, textBox);', mais c'est difficile à dire sans plus de détails. – Quartermeister

4

Une autre façon de le faire serait à l'aide WinAPI, SendMessage pour être précis:

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

donnons le nom de cette façon, lorsque l'accent est mis sur la zone de texte:

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

0x0102 est la valeur constante pour WM_CHAR et 72 est le code pour H (vous pouvez le modifier en conséquence).

+1

Merci pour le partage, mais je trouve la solution Quartermeisters plus propre et plus simple. – stiank81

+0

Il est toujours bon de savoir plus d'une solution possible. –

+0

Oui, bien sûr! Voilà pourquoi je vous ai donné un +1 :-) – stiank81

Questions connexes