none
saber si un formulario esta abierto y cerrarlo desde otro RRS feed

  • Pregunta

  • buenos días

    tengo una aplicacion visual net winforms.

    desde un formulario llamo a otro (no modal) lo que quiero es saber si se le vuelve a llamar al mismo formulario, como puedo saber si esta abierto y en ese caso cerrarlo para volver a cargarlo con los nuevos datos

    son dos forms que conviven en pantalla a la vez (pero claro solo una instancia del form)

    gracias


    Aran

    viernes, 19 de junio de 2020 11:23

Respuestas

  • Lo que te puse ahí es por si hay un form previamente abierto, el se cierra, lo que evita es que hayan multiples forms abiertos simultáneamente. Eso fue lo que entendí que querías.

    Asi te sale.

    Asi deberías ponerlo luego.

    viernes, 19 de junio de 2020 14:52
    Moderador
  • bueno entre todas las respuestas lo he conseguido solucionar

    en concreto mucho mas fácil de lo parecía

    lo copio por si sirve:

     For Each f As Form In Application.OpenForms
                If Not f.InvokeRequired Then
                    If f.Name = "frmTareasPreventivo" Then
                        f.Close()
                        Exit For
                    End If
                End If
    Next


    Aran

    • Marcado como respuesta aticnet sábado, 20 de junio de 2020 9:31
    sábado, 20 de junio de 2020 9:30

Todas las respuestas

  • Hola aticnet

    Puedes intentar esto:

    En las propiedades del proyecto, hay una configuración llamada "Modo de apagado", configúrelo en "Cuando se cierra el último formulario".

    y también revisa estos enlaces

    Abrir nuevo form cerrando el antiguo VB

    Codigo VB para cerrar form si esta abierto

    Abrir segundo form y cerrar el primero

    Saludos

    viernes, 19 de junio de 2020 13:15
    Moderador
  • perdona no entiendo nada

    yo tengo el código que pego a continuación para lanzar el nuevo form frmTareasPreventivo pero antes debo saber si ya hay una instancia del mismo abierta para poder cerrarla y volver a lanzarlo con los nuevos parametros

    Dim Mnu As New frmTareasPreventivo(cl, Turno, txtOperario.Text)
            With Mnu
                .StartPosition = FormStartPosition.CenterScreen
                .Tag = ""
                .Show()
            End With
     Mnu = Nothing

    no entiendo que tiene que ver con lo que citas:

    En las propiedades del proyecto, hay una configuración llamada "Modo de apagado", configúrelo en "Cuando se cierra el último formulario".

    Podrias ponerme el código de ejemplo por favor?




    • Editado aticnet viernes, 19 de junio de 2020 14:19 falta información
    viernes, 19 de junio de 2020 14:17
  • Lo que te puse ahí es por si hay un form previamente abierto, el se cierra, lo que evita es que hayan multiples forms abiertos simultáneamente. Eso fue lo que entendí que querías.

    Asi te sale.

    Asi deberías ponerlo luego.

    viernes, 19 de junio de 2020 14:52
    Moderador
  • Hola para saber si un formulario está abierto debes preguntar en el objeto Application algo así

     Imports System.Linq  
    
    
    If Application.OpenForms().OfType(Of Form2).Any Then
      MessageBox.Show("Opened")
    Else
      Dim f2 As New Form2
      f2.Text = "form2"
      f2.Show()
    End If


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 19 de junio de 2020 16:23
  • gracias

    el imports system.linq me da error me dice que no contiene ningun miembro publico

    entonces al poner Application.openforms ... me dice que no es un miembro de mi aplicacion



    Ademas

    si esta abierto lo que quiero es cerrarlo para volver a abrirlo con nuevos parametros

    como lo cierro desde el otro formulario?


    Aran

    sábado, 20 de junio de 2020 9:06
  • bueno entre todas las respuestas lo he conseguido solucionar

    en concreto mucho mas fácil de lo parecía

    lo copio por si sirve:

     For Each f As Form In Application.OpenForms
                If Not f.InvokeRequired Then
                    If f.Name = "frmTareasPreventivo" Then
                        f.Close()
                        Exit For
                    End If
                End If
    Next


    Aran

    • Marcado como respuesta aticnet sábado, 20 de junio de 2020 9:31
    sábado, 20 de junio de 2020 9:30
  • Hola:
    > el imports system.linq me da error <
    ¿Tan viejo es tu Visual Studio?
    Me parece que con VS2008 ya funcionaba LinQ
    >  si esta abierto lo que quiero es cerrarlo para volver a abrirlo con nuevos parametros  como lo cierro desde el otro formulario ?<
    Para abrir un formulario
     
            moHijo = New FrmHijo
            moHijo.Show()
    para cerrarlo
            moHijo.Close()

    Un saludo desde Bilbo
    Carlos
    sábado, 20 de junio de 2020 9:53