none
Seleccionar el texto de un texbox cuando recibe el foco y algo mas...

    Pregunta

  • Hola Chicos

    Mi consulta es la siguiente: Necesito seleccionar el texto de un texbox cuando este recibe el foco, yo se que se hace con "SelectAll()" en el evento Gotfocus del control, aqui es donde viene el "algo mas..." imaginense tener 200 Textbox en un formulario y escribir esas mismas veces las lineas para el evento de cada control (no son 200 pero si son bastantes...), debe haber una forma de escribir la linea una sola vez y que sea usada para cualquier Textbox que reciba el foco, no sirve el "For Each Next ni nada de eso, no quiero saber que control tiene el foco necesito saber cual lo recibe, capturar el Name en una variable o algo que pueda usar para no tener que reescribir el codigo para cada control, desde ya gracias.   :o)


    P.D. Olvide decir que estoy programando en VB .Net, mis disculpas
    • Editado fertrones0 lunes, 20 de marzo de 2017 3:02
    lunes, 20 de marzo de 2017 2:47

Respuestas

  • Hola fertrones0,

    Lo que tendrías que hacer es un 'For Each' buscando los controles TextBox de tu formulario y enlazarlos a un mismo evento Enter (el cual se ejecuta cuando el control se convierte en el control activo del formulario, valga la redundancia).

    Cuando se carga el formulario hacer el recorrido :

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        'Recorre todo los TextBox del formulario y los enlaza al mismo evento Enter
        For Each tb As TextBox In Controls.OfType(Of TextBox)
            AddHandler tb.Enter, AddressOf txtFocus
        Next
    
    End Sub

    Y en el método que ejecutará cuando se ejecute el evento enlazado :

    Private Sub txtFocus(sender As Object, e As EventArgs)
    
        'Obtenemos el TextBox que ejecutó en evento
        Dim txt As TextBox = CType(sender, TextBox)
    
        'Seleccionamos el texto del TextBox
        txt.SelectAll()
    
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta fertrones0 lunes, 20 de marzo de 2017 3:50
    lunes, 20 de marzo de 2017 3:21
  • Hola Joel, muchas gracias por tu respuesta, te cuento que con TAB funciona bien, pero al recibir el foco por click del mouse no, entonces le puse esta linea:

    AddHandler tb.Click, AddressOf txtFocus

    y funciona, pero el problema entonces es que no puedo posicionarme con el mouse para modificar la parte que quiero porque vuelve a seleccionar todo... alguna idea?

    Hola fertrones0,

    Claro, porque al seleccionar el texto tienes que hacer click y el evento se dispara. En el código que mostré anteriormente, cambia esta línea :

    Seleccionamos el texto del TextBox
    txt.SelectAll()

    Por esta otra : (Si no te funciona, ¿Qué framework estás utilizando?)

    'Seleccionamos el texto del TextBox
    BeginInvoke(TryCast(Sub() txt.SelectAll(), Action))

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta fertrones0 lunes, 20 de marzo de 2017 4:03
    lunes, 20 de marzo de 2017 3:49

Todas las respuestas

  • Hola fertrones0,

    Lo que tendrías que hacer es un 'For Each' buscando los controles TextBox de tu formulario y enlazarlos a un mismo evento Enter (el cual se ejecuta cuando el control se convierte en el control activo del formulario, valga la redundancia).

    Cuando se carga el formulario hacer el recorrido :

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        'Recorre todo los TextBox del formulario y los enlaza al mismo evento Enter
        For Each tb As TextBox In Controls.OfType(Of TextBox)
            AddHandler tb.Enter, AddressOf txtFocus
        Next
    
    End Sub

    Y en el método que ejecutará cuando se ejecute el evento enlazado :

    Private Sub txtFocus(sender As Object, e As EventArgs)
    
        'Obtenemos el TextBox que ejecutó en evento
        Dim txt As TextBox = CType(sender, TextBox)
    
        'Seleccionamos el texto del TextBox
        txt.SelectAll()
    
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta fertrones0 lunes, 20 de marzo de 2017 3:50
    lunes, 20 de marzo de 2017 3:21
  • Hola Joel, muchas gracias por tu respuesta, te cuento que con TAB funciona bien, pero al recibir el foco por click del mouse no, entonces le puse esta linea:

    AddHandler tb.Click, AddressOf txtFocus

    y funciona, pero el problema entonces es que no puedo posicionarme con el mouse para modificar la parte que quiero porque vuelve a seleccionar todo... alguna idea?

    lunes, 20 de marzo de 2017 3:42
  • Hola Joel, muchas gracias por tu respuesta, te cuento que con TAB funciona bien, pero al recibir el foco por click del mouse no, entonces le puse esta linea:

    AddHandler tb.Click, AddressOf txtFocus

    y funciona, pero el problema entonces es que no puedo posicionarme con el mouse para modificar la parte que quiero porque vuelve a seleccionar todo... alguna idea?

    Hola fertrones0,

    Claro, porque al seleccionar el texto tienes que hacer click y el evento se dispara. En el código que mostré anteriormente, cambia esta línea :

    Seleccionamos el texto del TextBox
    txt.SelectAll()

    Por esta otra : (Si no te funciona, ¿Qué framework estás utilizando?)

    'Seleccionamos el texto del TextBox
    BeginInvoke(TryCast(Sub() txt.SelectAll(), Action))

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta fertrones0 lunes, 20 de marzo de 2017 4:03
    lunes, 20 de marzo de 2017 3:49
  • Perfecto funciono al 100, muchas gracias, si no estoy mal estoy usando el 4.5

    lunes, 20 de marzo de 2017 3:55