web-dev-qa-db-fra.com

Comment simuler une pression sur une touche de tabulation lorsque vous appuyez sur la touche Retour dans une application WPF?

Dans une application WPF, j'ai une fenêtre qui contient beaucoup de champs. Lorsque l'utilisateur utilise la touche TAB après avoir renseigné chaque champ, Windows comprend le passage au suivant. C'est un comportement assez connu.

Maintenant, ce que je veux faire, c'est de simuler la touche TAB, alors que le retour est touché. Donc, dans mon xaml WPF j'ai ajouté impliquer KeyDown="userPressEnter"

Et dans le code derrière cela:

private void userPressEnter(object sender, KeyEventArgs e)
{
  if (e.Key == Key.Return)
  {
    e.Key = Key.Tab // THIS IS NOT WORKING
  }
}

Maintenant, évidemment, cela ne fonctionne pas. Mais ce que je ne sais pas, c'est comment faire ce travail?


EDIT 1 ==> TROUVE UNE SOLUTION

J'ai trouvé quelque chose qui m'a aidé =)

private void userPressEnter(object sender, KeyEventArgs e)
{
 if (e.Key == Key.Return)
 {
   TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next);
   MoveFocus(request);
 }
}

De cette façon, le focus se déplace sur le suivant, il peut trouver :)

16
Dante1986

Vous pouvez consulter un article ici: http://social.msdn.Microsoft.com/Forums/en/wpf/thread/c85892ca-08e3-40ca-ae9f-23396df6f3bd

Voici un exemple:

private void textBox1_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next);
                request.Wrapped = true;
                ((TextBox)sender).MoveFocus(request);
            }
        }
13
Nick Bray
    protected override bool ProcessDialogKey(Keys keyData)
    {
        System.Diagnostics.Debug.WriteLine(keyData.ToString());

        switch (keyData)
        {
            case Keys.Enter:
                SendKeys.Send("{TAB}");
                break;
        }
        base.ProcessDialogKey(keyData);
        return false;
    }
4
ecklerpa

Je pense que vous devriez utiliser cela pour simuler TAB:

SendKeys.Send("{TAB}");

Au lieu de 

e.Key = Key.Tab

Sources: http://msdn.Microsoft.com/en-us/library/system.windows.forms.sendkeys.send.aspx

1
Kevin

Utilisez la méthode SelectNextControl de votre formulaire

0
sasch

Que diriez-vous de faire que SendKeys Class fonctionne comme Winforms.SendKeys

https://michlg.wordpress.com/2013/02/05/wpf-send-keys/

public static class SendKeys
{
    public static void Send(Key key)
    {
        if (Keyboard.PrimaryDevice != null) {
            if (Keyboard.PrimaryDevice.ActiveSource != null) {
                var e1 = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, key) { RoutedEvent = Keyboard.KeyDownEvent };
                InputManager.Current.ProcessInput(e1);
            }
        }
    }
}
0
최승훈

SendKeys.Send ou SendKeys.SendWait ne fonctionnera pas dans une application WPF, donc pour répondre à la question d'origine 

if (e.Key == Key.Return)
{    
    KeyEventArgs tabPressEventArgs = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Tab) { RoutedEvent = Keyboard.KeyDownEvent };
    InputManager.Current.ProcessInput(tabPressEventArgs); 
}
0
stuicidle