none
Una pregunta simple

    Pregunta

  • Hace unos pocos dias que me registre a este foro y ya es uno de mis favoritos, asi q disculpen mi insistencia con lo que creo que seran una serie de preguntas muy simples

    Estoy haciendo un proyecto cuyo formulario principal tiene la propiedad isMdiContainer = true, lo que me gustaria saber para que no se me haga un desorden de formularios, es poder identificar si un formulario particular esta abierto o no.
    Si pueden decirme cual es la propiedad q hace esto, me será de gran ayuda.
    Muchas gracias
    martes, 31 de julio de 2007 13:27

Respuestas

  • La respuesta que buscas es : Me.ActiveMdiChild, dado que si aparecen en la lista del menu representa que lo tienes 'open'. Para recorrer el MDIList con un sencillo 'for Each' es suficiente... supongo que lo tienes claro.

     

    Como te dije... a partir de esto tienes que montar el control que te interesa sobre la ejecucion de los forms.

    En el siguiente ejemplo, a cada 'tick' de timer (cuando cumple el intervalo), se comprueba que el form abierto no lleve abierto mas tiempo de dos ejecuciones del timer1. Entonces avisa al usuario que su form ha excedido el tiempo maximo que puede estar activo. Pero esto no deja de ser un ejemplo.

     

        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As ..
            Static FormActivo As String = ""

            Try

                If FormActivo = Me.ActiveMdiChild.Text Then

                    Dim respuesta As DialogResult = MessageBox.Show("Se ha excedido el tiempo maximo de formulario abierto", "Cerrando: " + Me.ActiveMdiChild.Text, MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk)

     

                    If respuesta = Windows.Forms.DialogResult.OK Then

                        Me.ActiveMdiChild.Close()

                    Else

                        FormActivo = ""

                    End If

     

                Else

                    FormActivo = Me.ActiveMdiChild.Text

                End If

            Catch ex As Exception

                'No existen forms activos

            End Try

        End Sub

     

    Saludos,

    Pep Lluis,

     

    miércoles, 1 de agosto de 2007 14:32
    Moderador

Todas las respuestas

  • Creo que esto podra ayudarte.

    Public Class Form1

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

            Me.IsMdiContainer = True

            Dim MiBoton As New Button

            MiBoton.Text = "Añadir"

            MiBoton.Dock = DockStyle.Bottom

            AddHandler MiBoton.Click, AddressOf NuevoFormHijo

            Me.Controls.Add(MiBoton)

            Dim MiMenu As MainMenu = New MainMenu

            Me.Menu = MiMenu

            Dim misForms As MenuItem = MiMenu.MenuItems.Add("&Forms Cargados")

            misForms.MdiList = True

        End Sub

     

        Private Sub NuevoFormHijo(ByVal sender As Object, ByVal e As System.EventArgs)

            Dim UnHijoMas As New Form

            UnHijoMas.Text = "He Nacido a las : " + System.DateTime.Now

            UnHijoMas.MdiParent = Me

            UnHijoMas.Show()

        End Sub

    End Class

     

    Luego solo tienes que acceder a la lista de forms cargados en el menu y recorrerlos, si tienes dificultades en realizarlo, no dudes en contactar de nuevo y podemos adaptarlo estrictamente a lo que necesites.

    Saludos,

    Pep Lluis,

     

    martes, 31 de julio de 2007 15:08
    Moderador
  • Gracias me sirvio bastante.Aunque yo buscaba una propiedad isOpen()  que te dijiera si tal formulario esta abierto
    Algo asi

    por ejemplo

    if my.forms.formulario.isOpen() then

    "Cerrar el fomulario"

    end if

    Si no existe la tendre q hacer!!! .Muchas gracias por todo
    martes, 31 de julio de 2007 23:50
  • La respuesta que buscas es : Me.ActiveMdiChild, dado que si aparecen en la lista del menu representa que lo tienes 'open'. Para recorrer el MDIList con un sencillo 'for Each' es suficiente... supongo que lo tienes claro.

     

    Como te dije... a partir de esto tienes que montar el control que te interesa sobre la ejecucion de los forms.

    En el siguiente ejemplo, a cada 'tick' de timer (cuando cumple el intervalo), se comprueba que el form abierto no lleve abierto mas tiempo de dos ejecuciones del timer1. Entonces avisa al usuario que su form ha excedido el tiempo maximo que puede estar activo. Pero esto no deja de ser un ejemplo.

     

        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As ..
            Static FormActivo As String = ""

            Try

                If FormActivo = Me.ActiveMdiChild.Text Then

                    Dim respuesta As DialogResult = MessageBox.Show("Se ha excedido el tiempo maximo de formulario abierto", "Cerrando: " + Me.ActiveMdiChild.Text, MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk)

     

                    If respuesta = Windows.Forms.DialogResult.OK Then

                        Me.ActiveMdiChild.Close()

                    Else

                        FormActivo = ""

                    End If

     

                Else

                    FormActivo = Me.ActiveMdiChild.Text

                End If

            Catch ex As Exception

                'No existen forms activos

            End Try

        End Sub

     

    Saludos,

    Pep Lluis,

     

    miércoles, 1 de agosto de 2007 14:32
    Moderador
  • Buenisimo !! Muchisimas gracias
    miércoles, 1 de agosto de 2007 17:26