2010-12-14 59 views
0

J'ai un TextBox en surbrillance (le curseur clignote sur lui). Maintenant, d'autre usercontrol (qui contient des boutons) je veux envoyer l'événement qui insérera char dans le TextBox en appuyant sur l'un des boutons qui sont sur le usercontrol.Comment utiliser char dans TextBox?

Ce besoin d'être sans perdre le focus de la zone de texte ... (curseur clignotant sur la zone de texte)

Comment puis-je le faire? (j'essaie d'élever l'événement de touche vers le bas - mais cela ne fonctionne pas)

+0

Vous ne pouvez pas cliquer sur un autre bouton sans perdre le focus de la zone de texte. Pourquoi veux-tu faire cela? – decyclone

+0

ok, l'accent n'est pas le problème principal :) - je veux utiliser le bouton comme le type de clavier virtuel – Yanshof

+0

C'est un peu le clavier virtuel qui contient 5 bouton (1, 2, 3, 4, 5) Et chacun il faut les ajouter en tant que char dans le TextBox. Le 'Clavier virtuel' est un userControl qui existe dans la même fenêtre avec 2 textBox. Je sais que la sorcière de ces deux textBox est au centre - donc je sais à qui je dois envoyer l'événement. Mais je ne sais toujours pas comment envoyer l'événement ... – Yanshof

Répondre

1

Faites que vos boutons ne soient pas focalisables (Focusable = false).

1

Voulez-vous utiliser ce clavier virtuel avec d'autres applications, ou est-ce quelque chose qui se passe uniquement dans votre application? Au-delà de cela, si c'est seulement votre application, voulez-vous seulement insérer des caractères dans un TextBox particulier, ou potentiellement TextBox?

S'il s'agit d'un clavier virtuel destiné à fonctionner avec n'importe quelle application, vous devez utiliser une méthode API Win32 telle que SendKeys. WinForms a une interface extrêmement facile pour using SendKeys.

Si jamais il ne doit ajouter des caractères à celui TextBox, il est beaucoup plus facile de modifier la propriété de TextTextBox plutôt que d'essayer de déclencher des événements sur elle pour obtenir le comportement souhaité. Il y a une propriété CaretIndex qui vous dira où insérer le caractère. Au-delà, c'est une simple concaténation de chaînes.

+0

Mais le problème est que j'ai besoin de déplacer le curseur vers l'avant et de retour et si je viens de changer le texte de la TextBox alors ce n'est pas ce qui s'est passé. – Yanshof

1
 <StackPanel> 
      <TextBox Name="MainTextBox" /> 
      <Button Content="A" 
        Focusable="False" 
        Click="Button_Click" /> 
      <Button Content="B" 
        Focusable="False" 
        Click="Button_Click" /> 
      <Button Content="C" 
        Focusable="False" 
        Click="Button_Click" /> 
      <Button Content="D" 
        Focusable="False" 
        Click="Button_Click" /> 
      <Button Content="E" 
        Focusable="False" 
        Click="Button_Click" /> 
     </StackPanel> 

code:

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     MainTextBox.Text += (sender as Button).Content.ToString(); 
    } 
1
var text = button.Content as string; 
textbox.SelectedText = text; 
textbox.SelectionLength = 0; // removing selection from inserted text 
textbox.SelectionStart += text.Length; 

Ce insérera le contenu de bouton à la position du curseur (et remplacer du texte sélectionné) - le même que l'utilisateur à partir du clavier, il entré. PS. si textbox est inconnu, il peut être trouvé avec

var textbox = FocusManager.GetFocusedElement(FocusManager.GetFocusScope(this)) as TextBox; 

Au lieu de FocusManager.GetFocusScope(this) vous pouvez mettre window.

Si vous en avez besoin non seulement pour les zones de texte, les fonctions WinAPI devraient vous aider. Voir http://www.pinvoke.net/default.aspx/user32.sendinput