2012-01-26 13 views
15

In un'applicazione WPF, ho una finestra con molti campi. Quando l'utente utilizza il tasto TAB dopo aver riempito ciascun campo, Windows capisce che passa a quello successivo. Questo è un comportamento abbastanza noto.Come si simula un tasto Tab quando si preme Return in un'applicazione WPF?

Ora quello che voglio, è simulare il tasto TAB, quando in realtà viene colpito il RITORNO. Così nel mio WPF XAML ho aggiunto implica KeyDown="userPressEnter"

E nel codice dietro di esso:

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

Ora, ovviamente questo non sta funzionando. Ma quello che non so è, come posso fare questo lavoro?


EDIT 1 ==> TROVATO UNA SOLUZIONE

ho trovato qualcosa che mi ha aiutato =)

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

In questo modo l'attenzione si sposta sul prossimo si può find :)

+0

Con scheda Simula, si intende spostare il cursore sul campo successivo nella finestra? – Tudor

+0

Sì, spostalo sull'handler successivo, in modo che possa essere un campo o un pulsante. Quindi simula lo stesso comportamento come se l'utente avrebbe colpito TAB. Ecco perché cerco semplicemente di dare al sistema l'input TAB, quando infatti viene premuto RETURN. – Dante1986

+0

Problema della soluzione: è necessario aggiungerlo a ogni singolo controllo, altrimenti MoveFocus non selezionerà il campo successivo corretto. – Sam

risposta

13

Potete guardare un post qui: http://social.msdn.microsoft.com/Forums/en/wpf/thread/c85892ca-08e3-40ca-ae9f-23396df6f3bd

Ecco un esempio:

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

hehe l'ho trovato anch'io :) anche se ho dovuto renderlo un po 'diverso per farlo funzionare;) – Dante1986

1

Penso che dovresti usarlo per simulare il TAB:

SendKeys.Send("{TAB}"); 

Invece di

e.Key = Key.Tab 

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

+1

So che questo metodo funziona con le app Winforms, ma funziona anche con WPF? – Tudor

+2

Hai ragione non ... Ho trovato questo invece, ma sono sicuro che c'è una soluzione migliore http://inputsimulator.codeplex.com/ – Kevin

+0

Trovato una soluzione, modificato il mio primo post. – 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

Questa è una soluzione winforms. SendKeys è nella dll System.Windows.Forms e non nella dll System.Windows – Mafii

0

Utilizzare il metodo SelectNextControl del modulo

+1

questa è una soluzione WinForms – LuckyLikey

Problemi correlati