É muito comum no desenvolvimento de aplicações além da tecla Tab, definir o Enter para pular entre os controles do formulário, principalmente sistemas migrados do DOS em que o pessoal tinha esse costume de utilizar o Enter.

Com um projeto WPF criado, coloque 4 TextBox no formulário.

Formulario

Feito isso, vá até o evento PreviewKeyDown do mesmo. O código para fazer o Enter pular de controle está abaixo.

private void Window_PreviewKeyDown(object sender, KeyEventArgs e){    var elemento = e.OriginalSource as UIElement;

    if (elemento == null)        return;

    if(e.Key == Key.Enter)        elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));}

O código é simples, primeiro criamos uma variável a partir do e.OriginalSource que é o controle que estamos, e será a partir dele que vamos mudar o foco. Depois só temos uma verificação que se elemento for nulo retorna e não faz mais nada;

O if é simples, verifico se a tecla pressionada foi o Enter, e ai chamamos o método MoveFocus() que move o foco de um controle para outro, esse método recebe uma nova instância da classe TraversalRequest que representa uma requisição para mover o foco para outro controle.

No construtor da TraversalRequest passamos o enum FocusNavigationDirection que contém as opções abaixo:

  • Next
  • Previous
  • First
  • Last
  • Left
  • Right
  • Up
  • Down

Cada uma das opções move o foco de acordo com o TabOrder do formulário ou pela posição dos controles.

Com esse enum fica fácil criarmos mais opções para o usuário, por exemplo se o usuário clicar a seta para cima mudamos o foco para o controle acima, o código ficaria assim.

private void Window_PreviewKeyDown(object sender, KeyEventArgs e){    var elemento = e.OriginalSource as UIElement;

    if (elemento == null)        return;

    if(e.Key == Key.Enter)        elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));    if (e.Key == Key.Up)        elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Up));}

Fica aqui a dica principalmente para quem está migrando de WindowsForms para WPF, e vai ver que alguns (muitos) detalhes funcionarão de forma diferente.

Abraços.

  • http://www.israelaece.com/ Israel Aece

    ARGH!!! Mania de MS-DOS! :)

  • Judy

    Oii… parabéns!

  • Ancelmo

    Como fazer isso numa aplicação WEB utilizando C#?

  • Abraaolenon

    Muito bom, Perfeito, Cara
    Meus Parabens

  • Oops Twitter isnt working at the moment