none
Asignar Focos a un control al cerrar un formulario

    Pregunta

  • Buenas a todos/as

    Programa en vb.net 2010

    En el Load del registro Factura asigno el focos al control código producto así: 

    Me.ActiveControl = txtCodigoProducto


    Todo funciona bien hasta ahí.

    Cunado guardo la factura se abre un 2do formulario que se llama FrmSaldoFactura, ahí sale un resumen de la factura, cuanto hizo, con cuanto pagó la factura  y cuanto tengo que devolver.

    Desde el evento FromClose de: FrmSaldoFactura, ejecuto el código que limpias los controles del Registro Factura, generar numero factura y asigno el focos al control código producto.

    Cuando cierro la ventana de: FrmSaldoFactura, todo funciona bien menos el código que asigno el focos al control código producto.

    Tengo varias horas por controlar esto, pero no he podido asignar el focos al control código producto

    Gracias de antemano 

    miércoles, 16 de noviembre de 2016 15:36

Respuestas

  • Hola

    Para solucionar lo que necesitas tienes que implementar el patron Singleton

    [Winforms] Singleton - Pasar datos entre formularios

    Public Partial Class frmPrincipal
    	Inherits Form
    	Public Sub New()
    		InitializeComponent()
    	End Sub
    
        Private Sub frmPrincipal_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            AddHandler CompleteEvents.Complete, New CompleteEvents.CompleteHandler(AddressOf CompleteEvents_Complete)
        End Sub
    
    	Private Sub CompleteEvents_Complete(args As CompleteEventArgs)
    
            TextBox1.Focus()
    	End Sub
        
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim paso1 As New frmPaso1()
            paso1.ShowDialog()
        End Sub
    End Class

    Analiza el código, espero haberte ayudado.


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    • Marcado como respuesta EliannyRD sábado, 19 de noviembre de 2016 18:38
    viernes, 18 de noviembre de 2016 16:06
  • Hola EliannyRD,

    Entonces lo que podrías hacer es obtener la instancia actual del frmRegistroFactura y asignarle el foco al control en el evento FormClosed.

    Private Sub frmSaldoFactura_FormClosed(ByVal sender As .....
    
     Dim frf = My.Application.OpenForms.OfType(Of frmRegistroFactura).FirstOrDefault()
    
     If frf IsNot Nothing Then
         frf.txtCodigoProducto.Focus()
     End If
    
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta EliannyRD sábado, 19 de noviembre de 2016 18:38
    sábado, 19 de noviembre de 2016 16:42

Todas las respuestas

  • En lugar de poner el código en el evento Load, Muévela al evento Activated
    miércoles, 16 de noviembre de 2016 15:39
  • Lamentablemente no funciona, el focos como que se pierde 
    miércoles, 16 de noviembre de 2016 16:44
  • Hola EliannyRD,

    Al momento de crear la instancia de la clase FrmSaldoFactura podrías crear un Handler al FormClosed para asignar un foco al control.

     Dim fsf As New FrmSaldoFactura
     AddHandler fsf.FormClosed, AddressOf cerrarSaldoFact
     fsf.Show()

    Y cuando el form es cerrado, se ejecutaría esa acción :

    Private Sub cerrarSaldoFact(sender As Object, e As FormClosedEventArgs)
      Me.txtCodigoProducto.Focus()
    End Sub
    

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 16 de noviembre de 2016 17:14
  • Hola

    Para solucionar lo que necesitas tienes que implementar el patron Singleton

    [Winforms] Singleton - Pasar datos entre formularios

    Public Partial Class frmPrincipal
    	Inherits Form
    	Public Sub New()
    		InitializeComponent()
    	End Sub
    
        Private Sub frmPrincipal_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            AddHandler CompleteEvents.Complete, New CompleteEvents.CompleteHandler(AddressOf CompleteEvents_Complete)
        End Sub
    
    	Private Sub CompleteEvents_Complete(args As CompleteEventArgs)
    
            TextBox1.Focus()
    	End Sub
        
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim paso1 As New frmPaso1()
            paso1.ShowDialog()
        End Sub
    End Class

    Analiza el código, espero haberte ayudado.


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    • Marcado como respuesta EliannyRD sábado, 19 de noviembre de 2016 18:38
    viernes, 18 de noviembre de 2016 16:06
  • Buenos días hice todas las recomendaciones que se me exponen aquí, he incluso descargue el programa de ejemplo, y el problema todavía no está resulto.

    Yo hice un mini proyecto explicar mi caso.

    Son tres formularios.

    El form1 tiene un control que se llama txtCodigoproducto. Del form1 va al form2 y del form2 va al form3, entonces cuando cierro el form3, debería salir el Focus en el control txtCodigoproducto del form1.

    Yo realmente he puesto todo mi empeño en resolver este problema y realmente no he podido lograrlo. Hay cosas que a veces se ven fácil, pero muchas veces son muy complejas.

    Espero en Dios que este problema se pueda resolver.

    Ahí les dejo el enlace del mini proyecto, para que vean el funcionamiento.

    https://1drv.ms/u/s!AtWiD_aqrW5DhFf36q1s9bQRfPU3

    sábado, 19 de noviembre de 2016 12:15
  • Hola EliannyRD,

    Entonces lo que podrías hacer es obtener la instancia actual del frmRegistroFactura y asignarle el foco al control en el evento FormClosed.

    Private Sub frmSaldoFactura_FormClosed(ByVal sender As .....
    
     Dim frf = My.Application.OpenForms.OfType(Of frmRegistroFactura).FirstOrDefault()
    
     If frf IsNot Nothing Then
         frf.txtCodigoProducto.Focus()
     End If
    
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta EliannyRD sábado, 19 de noviembre de 2016 18:38
    sábado, 19 de noviembre de 2016 16:42
  • Gracias  a todos los que contestaron y tubieron la intencion de ayudarme

    gracias a Joel C. Naupa Crispín, el problema está resulto 100x%

    pero también gracias a Pedro Ávila, porque su código también ayudó a resolver el problema.  


    sábado, 19 de noviembre de 2016 18:38