Navegando con las Flechas

[Navegando por los Controles de un formulario con las flechas del teclado]

Fecha: 30/Oct/2004 (30/10/2004)
Autor: David Sabo W (david.sabo@gmail.com)

 

 


 

         Es posible navegar entre los controles de un formulario utilizando las Flechas Arriba y Abajo del teclado, de hecho, es muy sencillo de realizar.

            Básicamente existen dos maneras de implementar esta funcionalidad estas son:

-          Manejar el Evento de un TextBox específico dentro de un formulario.

-          Crear un “Custom Control”.

Es recomendable utilizar la primera manera si se quiere repetir esta funcionalidad en muchos TextBox, de lo contrario si se quiere implementar en pocos TextBox podemos adoptar la segunda opción.

A continuación explicare brevemente como implementar esta funcionalidad de ambas maneras. Comencemos con la primera, la más sencilla.

1.       Implementación en un TextBox dentro de un formulario.

a.       Para implementar esta funcionalidad en un formulario lo primero que debemos realizar es configurar la propiedad “TabIndex” de cada uno de los controles de tal forma que cumpla la secuencia requerida.

b.      Para controlar los eventos del teclado utilizaremos en este ejemplo el evento “KeyDown”, este puede ser sustituido si lo desea por el evento “KeyUp”.

c.       En el método que maneja el Evento “KeyDown” colocaremos el siguiente código:

            private void TextBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)

            {

                  if(e.KeyData == System.Windows.Forms.Keys.Up)

                  {

                       System.Windows.Forms.SendKeys.Send("+{TAB}");

                  }

                  else if(e.KeyData == System.Windows.Forms.Keys.Down)

                  {

                       System.Windows.Forms.SendKeys.Send("{TAB}");

                  }

                  else

                  {

                       base.OnKeyDown (e);

                  }

      }

         Como se habrán dado cuenta, cada vez que el usuario pulse la Tecla Arriba se enviará al formulario la Tecla SHIFT+TAB y cada vez que el usuario pulse la Tecla Abajo se enviará al formulario la Tecla TAB. Si lo vemos desde otro punto de vista, se sustituye la Tecla Arriba por SHIFT+TAB y la Tecla Abajo por la TAB.

     Nota: No se olviden de vincular este método con el evento KeyDown del TextBox de la siguiente forma:

this.TextBox1.KeyDown+=new System.Windows.Forms.KeyEventHandler(this.TextBox1_KeyDown);

d.      Listo!

2.       Implementación como un Custom Control

a.       Cree un Nuevo “Custom Control” en su proyecto.

b.      Para implementar esta funcionalidad sobrescribiremos el método OnKeyDown, con el siguiente código:

protected override void OnKeyDown(KeyEventArgs e)

            {

                  if(e.KeyData == System.Windows.Forms.Keys.Up)

                  {

                       System.Windows.Forms.SendKeys.Send("+{TAB}");

                  }

                  else if(e.KeyData == System.Windows.Forms.Keys.Down)

                  {

                       System.Windows.Forms.SendKeys.Send("{TAB}");

                  }

                  else

                  {

                       base.OnKeyDown (e);

                  }

            }

 

c.       Una vez realizado esto, podemos compilar e incluir en los formularios el control creado tantas veces como queramos y automáticamente la función estará implementada.

d.      Listo!

 

Anexo les envió el código listo para un Custom Control.

        public class TextBoxUpDown : System.Windows.Forms.TextBox

      {

            private System.ComponentModel.Container components = null;

 

            public TextBoxUpDown()

            {

                  InitializeComponent();

            }

 

            protected override void Dispose( bool disposing )

            {

                  if( disposing )

                  {

                       if( components != null )

                             components.Dispose();

                  }

                  base.Dispose( disposing );

            }

 

            #region Component Designer generated code

            /// <summary>

            /// Required method for Designer support - do not modify

            /// the contents of this method with the code editor.

            /// </summary>

            private void InitializeComponent()

            {

                  components = new System.ComponentModel.Container();

            }

            #endregion

 

            protected override void OnPaint(PaintEventArgs pe)

            {

                  base.OnPaint(pe);

            }

 

            protected override void OnKeyDown(KeyEventArgs e)

            {

                  if(e.KeyData == System.Windows.Forms.Keys.Up)

                  {

                       System.Windows.Forms.SendKeys.Send("+{TAB}");

                  }

                  else if(e.KeyData == System.Windows.Forms.Keys.Down)

                  {

                       System.Windows.Forms.SendKeys.Send("{TAB}");

                  }

                  else

                  {

                       base.OnKeyDown (e);

                  }

            }

             }                                              

ir al índice