2012-01-26 17 views
15

En una aplicación WPF, tengo una ventana que tiene muchos campos. Cuando el usuario usa la tecla TAB después de llenar cada campo, Windows entiende que pasa al siguiente. Este es un comportamiento bastante conocido.¿Cómo simulo una tecla Tabulador cuando presiono Retorno en una aplicación WPF?

Ahora lo que quiero hacer es hacer que simule la tecla TAB, cuando en realidad se produce el RETORNO. Así que en mi XAML de WPF que añade implica KeyDown="userPressEnter"

Y en el código detrás de él:

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

Ahora, obviamente esto no está funcionando. Pero lo que no sé es cómo hago que esto funcione.


EDIT 1 ==> encontrado una solución

encontré algo que me ayudó a salir =)

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

De esta manera el foco se desplaza en la siguiente se puede encontrar :)

+0

Al simular la tabulación, ¿quiere mover el cursor al siguiente campo de la ventana? – Tudor

+0

Sí, muévelo al siguiente controlador, de modo que pueda ser un campo o un botón. Así que simule el mismo comportamiento que si el usuario hubiera golpeado TAB. Es por eso que simplemente trato de darle al sistema la entrada TAB, cuando en realidad se presiona RETORNO. – Dante1986

+0

Problema de su solución: debe agregarlo a cada control, de lo contrario, MoveFocus no seleccionará el siguiente campo correcto. – Sam

Respuesta

13

Usted puede mirar en un puesto aquí: http://social.msdn.microsoft.com/Forums/en/wpf/thread/c85892ca-08e3-40ca-ae9f-23396df6f3bd

He aquí un ejemplo:

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); 
      } 
     } 
+0

jeje, acabo de encontrarlo también :) aunque tuve que hacerlo un poco diferente para que funcione;) – Dante1986

1

Creo que debería usar eso para simular TAB:

SendKeys.Send("{TAB}"); 

En lugar de

e.Key = Key.Tab 

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

+1

Sé que este método funciona para las aplicaciones de winforms, pero ¿también funciona para WPF? – Tudor

+2

Tiene razón, no ... He encontrado esto, pero estoy seguro de que hay una solución mejor http://inputsimulator.codeplex.com/ – Kevin

+0

Encontré una solución, edité mi primera publicación. – Dante1986

3
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; 
    } 
+0

Esta es una solución de winforms. SendKeys está en System.Windows.Forms dll y no en System.Windows dll – Mafii

0

Método de uso SeleccioneNextControl de su Formulario

+1

esta es una solución de WinForms – LuckyLikey

Cuestiones relacionadas