none
TextBox pierde el foco RRS feed

  • Pregunta

  • Buen dia señores.... ahora tengo un inconveniente con mi codigo en VB.NET, el cual es el siguiente:

    Necesito que al seleccionar  un elemento del ListView, los datos pasen a varios TextBox para que puedan ser modificados... pero, necesito colocar por programacion, el foco en el primer TextBox (que es el nombre de un producto)... la cuestion es que no lo hace... he realizado el debug y aunque la ultima linea del codigo del evento "ItemSelectionChanged" del ListView es este:

    Me.TxtBNombre.Focus()
    Me.TxtBNombre.SelectAll()
    Me.ActiveControl = Me.TxtBNombre

    al salirse del evento este, me manda al evento "Leave" del TextBox (Nombre)... con el debug, he visto el ActiveControl y efectivamente lo pierde y lo toma el ListView...

    No se que pueda estar pasando... 

    Gracias por su valiosa ayuda

    sábado, 29 de julio de 2017 19:28

Respuestas

  • El comportamiento que experimentas es lógico si conoces el orden en que se producen los eventos (MouseDown, ItemSelectionChanged, MouseUp), de hecho conociendo el orden puedes saber como "solventar el problema".

    Private Sub ListView1_ItemSelectionChanged(sender As Object, e As ...
    
    	'Asignar el valor de la columna 1 a la caja de texto
    	TxtBNombre.Text = e.Item.SubItems(0).Text
    
    	'TxtBNombre.Focus()
    	'TxtBNombre.SelectAll()
    
    End Sub
    
    Private Sub ListView1_MouseUp(sender As Object, e As MouseEventArgs) Handles ListView1.MouseUp
    
    	Me.ActiveControl = Me.TxtBNombre
    
    End Sub

    Puedes agregar una variable de tipo bandera para restringir las instrucciones del controlador del evento MouseUp sólo cuando se produce posterior al evento ItemSelectionChanged.


    Nuestra profesión exige tener pasión por resolver problemas de una manera eficiente (pasión + talento + conocimiento + mente proactiva + ...), nada me suena a hobby.

    • Marcado como respuesta wichortiz sábado, 29 de julio de 2017 22:30
    sábado, 29 de julio de 2017 20:10

Todas las respuestas

  • Hola:

     Es extraño desde mi entender que pase automáticamente al evento Leave, podrías probar con estas lineas:

    TxtBNombre.Select()
    TxtBNombre.Focus()
    TxtBNombre.SelectAll()
     


    Saludos desde Monterrey, Nuevo León, México!!!

    sábado, 29 de julio de 2017 19:45
  • El comportamiento que experimentas es lógico si conoces el orden en que se producen los eventos (MouseDown, ItemSelectionChanged, MouseUp), de hecho conociendo el orden puedes saber como "solventar el problema".

    Private Sub ListView1_ItemSelectionChanged(sender As Object, e As ...
    
    	'Asignar el valor de la columna 1 a la caja de texto
    	TxtBNombre.Text = e.Item.SubItems(0).Text
    
    	'TxtBNombre.Focus()
    	'TxtBNombre.SelectAll()
    
    End Sub
    
    Private Sub ListView1_MouseUp(sender As Object, e As MouseEventArgs) Handles ListView1.MouseUp
    
    	Me.ActiveControl = Me.TxtBNombre
    
    End Sub

    Puedes agregar una variable de tipo bandera para restringir las instrucciones del controlador del evento MouseUp sólo cuando se produce posterior al evento ItemSelectionChanged.


    Nuestra profesión exige tener pasión por resolver problemas de una manera eficiente (pasión + talento + conocimiento + mente proactiva + ...), nada me suena a hobby.

    • Marcado como respuesta wichortiz sábado, 29 de julio de 2017 22:30
    sábado, 29 de julio de 2017 20:10
  • Por eso aprecio mucho este foro... Excelente respuesta Williams... es exactamente lo que estaba ocurriendo... como luego del evento ItemSelectionChanged procede el evento MouseUp, es al control ListView el que recibe el foco... que buena respuesta y muchisimas gracias de nuevo.

    Wichortiz

    sábado, 29 de julio de 2017 22:30