none
Navegar entre os TextBox Enter próximo e UP anterior RRS feed

  • Pergunta

  • Boa tarde a todos,,

    Estou adicionando algumas rotinas em meus projeto para que seja possível navegar entre os controle pressionando a tecla ENTER para seguir para o próximo e UP "setinha para frente" para voltar ao controle anterior, ao navegar entre os controles tem algumas rotinas especificas para TextBox e PasswordBox afim de jogar o foco e já selecionar todo o conteúdo do TextBox ou PasswordBox. Enfim, utilizando a tecla enter funciona perfeitamente, o foco segui para o próximo controle e quando é TextBox já traz o texto seleciona, mas quando quero voltar um controle e quando é TextBox até está voltando, mas não está selecionando o meu Texto. Alguém poderia me ajudar.

    Aqui o fonte que estou utilizando para a seleção do TextBox.

    namespace WpfApplication2
    {
        /// <summary>
        /// Interaction logic for App.xaml
        /// </summary>
        public partial class App : Application
        {              
            protected override void OnStartup(StartupEventArgs e)
            {
                EventManager.RegisterClassHandler(typeof(TextBox), TextBox.GotFocusEvent, new RoutedEventHandler(TextBox_GotFocus));
                EventManager.RegisterClassHandler(typeof(TextBox), TextBox.LostFocusEvent, new RoutedEventHandler(TextBox_LostFocus));
                EventManager.RegisterClassHandler(typeof(TextBox), TextBox.PreviewMouseUpEvent, new RoutedEventHandler(TextBox_PreviewMouseUp));
    
                base.OnStartup(e);
            }
    
            private void TextBox_GotFocus(object sender, RoutedEventArgs e)
            {
                if (Mouse.LeftButton == MouseButtonState.Released)
                {
                    ((TextBox)sender).SelectAll();
                    ((TextBox)sender).Tag = true;
                }
            }
    
            private void TextBox_LostFocus(object sender, RoutedEventArgs e)
            {
                ((TextBox)sender).SelectionLength = 0;
                ((TextBox)sender).Tag = false;
            }
    
            private void TextBox_PreviewMouseUp(object sender, RoutedEventArgs e)
            {
                if ((((TextBox)sender).Tag == null || (bool)((TextBox)sender).Tag == false) && ((TextBox)sender).SelectionLength == 0)
                {
                    ((TextBox)sender).Tag = true;
                    ((TextBox)sender).SelectAll();
                }
            }
            
        }
    }


    Aqui o fonte que estou utilizando para navegar entre os controles.

    OBS: fiz um teste no fonte de navegação adicionando a seguinte instrução. e.Handled = true;, mas percebi que ao passar por ela alguns evento que deveriam ser executado depois deste, não são executado.

    namespace WpfApplication2
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
                this.PreviewKeyDown += new KeyEventHandler(previewke);
            }
    
            private void previewke(object sender, KeyEventArgs e)
            {
                if (e.Key == Key.Return || e.Key == Key.Up)
                {
                    UIElement x = (UIElement)e.OriginalSource;
                    if (x != null)
                    {
                        if (e.Key == Key.Return)
                            x.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
                        else
                            if (e.Key == Key.Up)
                                x.MoveFocus(new TraversalRequest(FocusNavigationDirection.Previous));
                        // e.Handled = true; //-> ao utilizar essa instrução alguns evento do proprio TextBox, exemplo o PreviewKeyDown não é executado
                    }
                }
            }
        }
    }

    Desde já agradeço a todos.

    Atenciosamente

    André



    • Editado André Oliver terça-feira, 3 de setembro de 2013 18:08
    terça-feira, 3 de setembro de 2013 18:05