none
Saltar de un textbox a otro con enter. RRS feed

  • Pregunta

  • Buen día señores.

    Luego de muchos años de no programar, vuelvo a las andadas. Por ahora, aunque lento ahí la llevo. Lo que necesito hacer es que, al ingresar un dato en textbox, dando Enter, salte al siguiente textbox, no me gusta que se tenga que hacer con tab.

    Aprovechando la vuelta. Por ahora, para asignar el valor introducido al textbox a una variable, lo hago en el evento lostfocus, la pregunta es: Es correcto así o hay algún método nuevo?. La cosa es que tengo varios texbox que reciben datos y luego los voy a usar en cálculos.

    Saludos y gracias

    miércoles, 27 de julio de 2016 14:21

Respuestas

  • eliaspelayo,

    Discúlpeme por la demora pero hoy ha sido un día bastante cargado en la oficina.

    'Debo colocar ese código para cada textbox o se puede hacer una sola función que trabaje con todos los textbox, usando por ejemplo el propio tabindex.

    En teoría sí, pero podrías evitar escribir código repetitivo suscribiendo todos los objetos del formulario a un sólo controlador de eventos.

    'En la parte de la función: Private Sub TextBox1_KeyDown.... ésta parte es el nombre de la función, está "amarrado al textbox? y en Handles txt.Nombre.KeyDown  es el textbox de donde debe saltar?....

    No, el salto a un siguiente control lo determina la función SelectedNextControl por eso la importancia de definir el índice correcto de tabulación.

    'En el form donde estoy trabajando, tengo varios texbox, pero un cálculo inicial, se hace con sólo dos de ellos, entonces: El primer cálculo que se hace, antes de terminar de capturar, en qué evento se pone, en el lostfocus del último dato a utilizar?

    ¿Dónde realizas el calculo? Sucede que no entiendo lo que intentas hacer, lo que menciono es que el valor lo puedes obtener en cualquier lugar. Si buscas un evento donde termina la edición del control ese es el evento Leave que se desencadena cuando el control ya no es el activo.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 27 de julio de 2016 19:30
  • eliaspelayo,

    Para pasar el foco entre objetos de tipo TextBox presionando la tecla [Enter] puedes hacer uso de la función SelectNextControl().

    Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles txtNombre.KeyDown
            If e.KeyCode = Keys.Enter AndAlso ActiveControl IsNot Nothing Then
                SelectNextControl(ActiveControl, True, True, True, True)
                e.Handled = True
            End If
        End Sub

    Considera tener configurado el orden de tabulación de los objetos de tipo TextBox con la propiedad TabIndex.

    El valor de un objeto de tipo TextBox puedes tomarlo en cualquier momento, te recomiendo hacerlo al momento de realizar los cálculos, no hay necesidad de capturarlos a penas el usuario haya realizado el ingreso. 


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    miércoles, 27 de julio de 2016 14:48

Todas las respuestas

  • eliaspelayo,

    Para pasar el foco entre objetos de tipo TextBox presionando la tecla [Enter] puedes hacer uso de la función SelectNextControl().

    Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles txtNombre.KeyDown
            If e.KeyCode = Keys.Enter AndAlso ActiveControl IsNot Nothing Then
                SelectNextControl(ActiveControl, True, True, True, True)
                e.Handled = True
            End If
        End Sub

    Considera tener configurado el orden de tabulación de los objetos de tipo TextBox con la propiedad TabIndex.

    El valor de un objeto de tipo TextBox puedes tomarlo en cualquier momento, te recomiendo hacerlo al momento de realizar los cálculos, no hay necesidad de capturarlos a penas el usuario haya realizado el ingreso. 


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    miércoles, 27 de julio de 2016 14:48
  • Primero que nada, gracias por responder.

    Bien, inserte el código que me diste y aunque funciona, no me queda muy claro, espero me puedas aclarar un algunos puntos:

    1.- Si me aseguré de tener el tabindex correcto para cada textbox

    2.- Debo colocar ese código para cada textbox o se puede hacer una sola función que trabaje con todos los textbox, usando por ejemplo el propio tabindex.

    3.- En la parte de la función: Private Sub TextBox1_KeyDown.... ésta parte es el nombre de la función, está "amarrado al textbox? y en Handles txt.Nombre.KeyDown  es el textbox de donde debe saltar?....

    4.- En el form donde estoy trabajando, tengo varios texbox, pero un cálculo inicial, se hace con sólo dos de ellos, entonces: El primer cálculo que se hace, antes de terminar de capturar, en qué evento se pone, en el lostfocus del último dato a utilizar?

    Discúlpame si sueno algo ignorante, pero es que esta forma de programar es totalmente nueva para mí. Han cambiado muchas cosas, de a poco le voy agarrando el hilo.

    Espero me haya dado a entender bien.

    Saludos y gracias

    miércoles, 27 de julio de 2016 15:26
  • eliaspelayo,

    Permitame 1 hora para responderle, hoy es un día bastante cargado de trabajo en la oficina, a penas me desocupe responderé con el detalle que requiere sus dudas.

    miércoles, 27 de julio de 2016 15:50
  • Te agradezco. Tómate tu tiempo, mientras me sigo peleando.

    Saludos y gracias

    miércoles, 27 de julio de 2016 15:53
  • Que tal amigo, puedes hacer esto. Crea  una funcion para poder reutilizar en todos los texbox que deseas.. Usando el evento  KeyPress

    --FUNCION

    Public Shared Sub EjecutarKeyPressEnter(sender_As(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles sender.As If e.KeyChar = CType(Keys.Enter, [Char]) Then e.Handled = True SendKeys.Send("{TAB}") End If End Sub

    --EJECUCION

    TextBox.KeyPress += Function(s, e) EjecutarKeyPressEnter

    OBS: Favor vota si te es útil la información.
    Saludos
    Bader Molinas - Paraguay
    https://deveintel.wordpress.com/




    miércoles, 27 de julio de 2016 19:18
  • eliaspelayo,

    Discúlpeme por la demora pero hoy ha sido un día bastante cargado en la oficina.

    'Debo colocar ese código para cada textbox o se puede hacer una sola función que trabaje con todos los textbox, usando por ejemplo el propio tabindex.

    En teoría sí, pero podrías evitar escribir código repetitivo suscribiendo todos los objetos del formulario a un sólo controlador de eventos.

    'En la parte de la función: Private Sub TextBox1_KeyDown.... ésta parte es el nombre de la función, está "amarrado al textbox? y en Handles txt.Nombre.KeyDown  es el textbox de donde debe saltar?....

    No, el salto a un siguiente control lo determina la función SelectedNextControl por eso la importancia de definir el índice correcto de tabulación.

    'En el form donde estoy trabajando, tengo varios texbox, pero un cálculo inicial, se hace con sólo dos de ellos, entonces: El primer cálculo que se hace, antes de terminar de capturar, en qué evento se pone, en el lostfocus del último dato a utilizar?

    ¿Dónde realizas el calculo? Sucede que no entiendo lo que intentas hacer, lo que menciono es que el valor lo puedes obtener en cualquier lugar. Si buscas un evento donde termina la edición del control ese es el evento Leave que se desencadena cuando el control ya no es el activo.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 27 de julio de 2016 19:30