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 :)
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);
}
}
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;
}
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
Utilisez la méthode SelectNextControl de votre formulaire
Que diriez-vous de faire que SendKeys Class fonctionne comme Winforms.SendKeys
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);
}
}
}
}
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);
}