none
activar formulario en vb.net RRS feed

  • Pregunta

  • Hola , me llamo Jesús,  tengo un formulario y desde este creo un nuevo formulario y lo abro con 

    form1.ShowDialog()

    , y una vez terminado el nuevo formulario me sigue ejecutando el código perfecto después de la llamada a form1.ShowDialog()

    Hasta aquí todo bien, pero he pensado que me gusta mas antes de llamar al nuevo formulario,

    minimizar el actual y llamar al nuevo y después volverlo a poner en su estado normal, de esta manera:

     Me.WindowState = FormWindowState.Minimized

    form1.ShowDialog()

    Me.WindowState = FormWindowState.Normal

    Esto también me funciona bien, la única pega es que si en el nuevo formulario  tengo un tooltip 

    para usarlo de ayuda en algunos controles este formulario no tiene realmente el foco activo

    y por tanto los mensajes de ayuda no me funcionan , en cambio si hago click en el nuevo formulario para que

    tenga el foco activo si fuciona.

    He probado dentro del nuevo formulario me.focus() pero no me funciona el tooltic porque sigue sin tener el foco activo.

    En cambio si en la funcion de llamada no uso las funciones de minimizar cuando llamo al

    nuevo formulario si tiene realmente y foco y si me funciona el tooltip

    Como puedo conseguir que tenga el nuevo formulario tenga el foco activo usando las funciones de minimizar el formulario?

    Muchas gracias un saludo

    viernes, 12 de septiembre de 2014 9:32

Respuestas

  • Hola de nuevo Christian, acabo de dar con la solucion definitiva al problema

    gracias a su ayuda usted me ha dado la pista, en vez de realizar el metodo activate en la llamada

    al formulario:form1.activate y despues form1.showdialog()

    he situado el metodo activate dentro del evento load del formulario a cargar:  form1

      Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Me.Activate()
        End Sub

    de esta manera va perfecto, parece que primero tiene que terminar de cargar el formulario y despues

    activarlo.

    Le agradezco mucho su ayuda

    Un saludo de Jesús


    viernes, 12 de septiembre de 2014 12:46
  • Hola de nuevo Cristian mi anterior solucíon es casi perfecta, solo tiene un pequeño fallo.

    en mi caso en concreto me interesa mejor declarar el formulario a cargar como variable privada de miclase de llamada

    No me interesa crearlo en el evento click al apretar un botón porque me interesa mantener los valores

    de algunos campos en el nuevo formulario cargado porque voya a cargalo varias veces y cuando
    se carge debe de tener los valores para no tener que volver a introducirlos

    me explico con este ejemplo:

    '--------------------------------------------------------------------------------------------

    'Clase del formulario que hace la llamada

    '------------------------------------------------------------------------------------------

    Public Class CargarFormulario

    private form1 as formACargar

    sub new

       InitializeComponent()
       form1= new formACargar

    end sub




     Private Sub btn_cargarFormulario_Click(sender As Object, e As EventArgs) Handles btn_cargarFormularior.Click

       Me.WindowState = FormWindowState.Minimized

       form1.ShowDialog()

       Me.WindowState = FormWindowState.Normal

     end sub

    end class


    En el formulario cargado en vez de añadir me.activate en el evento load

    es mejor añadirlo en el evento activated porque sino solo funcionaria bien la primera

    vez.  En mi caso en concreto estoy usando una variable global de clase para crear el formulario
    y nunca lo destruyo hasta que no cierre el formulario de llamada.

    Pero si se usa una variable local para crear el nuevo formulario entonces si funcianaria en ambos eventos.

    De esta nueva mamera si que va a funcionar siempre bien en cualquiera de los casos

    'formulario nuevo cargado

        Private Sub form1_Activated(sender As Object, e As EventArgs) Handles Me.Activated
            Me.Activate()
        End Sub
    De nuevo un saludo y muchas gracias


    viernes, 12 de septiembre de 2014 13:13

Todas las respuestas

  • Hola Jesús, puedes implementar este código:

    Me.WindowState = FormWindowState.Minimized
    
    form1.Activate()
    
    form1.ShowDialog()
    
    Me.WindowState = FormWindowState.Normal

    Espero sea de utilidad.

    Saludos.


    Christian Amado
    Software Engineer | MCPD: Windows Phone Developer | MCTS: Silverlight Developer
    Don't forget to mark the right answer and vote up if helps you.
    MCP Profile

    viernes, 12 de septiembre de 2014 11:50
  • Hola Chistian, acabo de probar el codigo:

    Me.WindowState = FormWindowState.Minimized form1.Activate() form1.ShowDialog() Me.WindowState = FormWindowState.Normal

    Y sigue sin funcionar el tooltip en el form1

    se ve que parece que no está activado el formulario, si hago clip con el mouse en el form1

    entonces el titulo de la ventana se pone en blanco indicando que está activada,

    en ese momento ya si me funciona el tooltip

    Yo he pensado si se pudiera simular el evento clip en el formulario form1 se activaria el formulario

    pero no he conseguido hacerlo, si a usted se le ocurre alguna solución, le agradecería

    su respuesta

    Muchas gracias


    viernes, 12 de septiembre de 2014 12:38
  • O.o

    Que extraño, a ver... Puedes probar asignando el Owner...

    Me.WindowState = FormWindowState.Minimized
    
    form1.Activate()
    
    form1.Owner = Me
    
    form1.ShowDialog()
    
    Me.WindowState = FormWindowState.Normal
    Espero que sea útil.


    Christian Amado
    Software Engineer | MCPD: Windows Phone Developer | MCTS: Silverlight Developer
    Don't forget to mark the right answer and vote up if helps you.
    MCP Profile


    viernes, 12 de septiembre de 2014 12:41
  • Hola de nuevo Christian, acabo de dar con la solucion definitiva al problema

    gracias a su ayuda usted me ha dado la pista, en vez de realizar el metodo activate en la llamada

    al formulario:form1.activate y despues form1.showdialog()

    he situado el metodo activate dentro del evento load del formulario a cargar:  form1

      Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Me.Activate()
        End Sub

    de esta manera va perfecto, parece que primero tiene que terminar de cargar el formulario y despues

    activarlo.

    Le agradezco mucho su ayuda

    Un saludo de Jesús


    viernes, 12 de septiembre de 2014 12:46
  • Hola de nuevo Cristian mi anterior solucíon es casi perfecta, solo tiene un pequeño fallo.

    en mi caso en concreto me interesa mejor declarar el formulario a cargar como variable privada de miclase de llamada

    No me interesa crearlo en el evento click al apretar un botón porque me interesa mantener los valores

    de algunos campos en el nuevo formulario cargado porque voya a cargalo varias veces y cuando
    se carge debe de tener los valores para no tener que volver a introducirlos

    me explico con este ejemplo:

    '--------------------------------------------------------------------------------------------

    'Clase del formulario que hace la llamada

    '------------------------------------------------------------------------------------------

    Public Class CargarFormulario

    private form1 as formACargar

    sub new

       InitializeComponent()
       form1= new formACargar

    end sub




     Private Sub btn_cargarFormulario_Click(sender As Object, e As EventArgs) Handles btn_cargarFormularior.Click

       Me.WindowState = FormWindowState.Minimized

       form1.ShowDialog()

       Me.WindowState = FormWindowState.Normal

     end sub

    end class


    En el formulario cargado en vez de añadir me.activate en el evento load

    es mejor añadirlo en el evento activated porque sino solo funcionaria bien la primera

    vez.  En mi caso en concreto estoy usando una variable global de clase para crear el formulario
    y nunca lo destruyo hasta que no cierre el formulario de llamada.

    Pero si se usa una variable local para crear el nuevo formulario entonces si funcianaria en ambos eventos.

    De esta nueva mamera si que va a funcionar siempre bien en cualquiera de los casos

    'formulario nuevo cargado

        Private Sub form1_Activated(sender As Object, e As EventArgs) Handles Me.Activated
            Me.Activate()
        End Sub
    De nuevo un saludo y muchas gracias


    viernes, 12 de septiembre de 2014 13:13