Activar un formulario MDICHILD que ya está abierto

20/04/2010 - 12:57 por Ira | Informe spam
Hola,



Tengo un formulario principal que es un formulario MDI. Este formulario MDI
tiene unos menús. Cuando se clicka en algún menú se abre uno u otro
formulario. Lo que necesito es que si al clickar en un menú, si el
formulario que se tiene que abrir ya está abierto, que no lo vuelva a abrir,
sino que lo active.

Utilizo el siguiente código pero el BringToFront, ni se entera. ¿Alguna idea
de como activar el formulario hijo?



Gracias



Private Sub Mnu_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Mnu.Click

Dim FormularioHijo As New FrmMtoClientes

If FormularioAbierto("FrmMtoClientes") = True Then

FormularioHijo.BringToFront()

Else

FormularioHijo.MdiParent = Me

FormularioHijo.Show()

End If

End Sub



Function FormularioAbierto(ByVal nb_formulario As String) As Boolean

FormularioAbierto = False

Dim Formu As Form

For Each Formu In Application.OpenForms

If Formu.Name = nb_formulario Then

FormularioAbierto = True

End If

Next

End Function
 

Leer las respuestas

#1 L. Garcia
20/04/2010 - 16:17 | Informe spam
Hola:

En tu codigo haces: 'FormularioHijo AS New ...', con lo cual FormularioHijo
'siempre es un nuevo formulario' !!!

Aunque busques con la función FormularioAbierto() si ya existe, luego operas
con FormularoHijo, con lo cual estás creando un formulario cada vez que
haces click!!!

Existen múltiples soluciones, pero la mas 'parecida' a lo que tienes seria
algo que así:

Dim frmHijo as FrmMtoClientes ''' IMPORTANTE: Sin el New!!!

frmHijo = FormularioAbierto("FrmMtoClientes")
If frmHijo Is Nothing Then ' Sino hay ninguno abierto, lo creamos de
nuevo
frmHijo = New FrmMtoClientes
frmHijo.MdiParent = Me
frmHijo.Show
Else ' Si está abierto, lo pasamos p'alante
frmHijo.BringToFront
Endif

Y cambiar la funcion FormularioAbierto para que devuelva el Formulario (en
vez de True/False)

Function FormularioAbierto(ByVal nb_formulario As String) As Form
Dim Formu As Form
For Each Formu In Application.OpenForms
If Formu.Name = nb_formulario Then Return Formu
Next
End Function

NOTA: No he comprobado el código, pero si no funciona, la idea es lo que
vale ;-)
Espero que te sirva
Saludos


"Ira" escribió en el mensaje
news:
Hola,

Tengo un formulario principal que es un formulario MDI. Este formulario
MDI tiene unos menús. Cuando se clicka en algún menú se abre uno u otro
formulario. Lo que necesito es que si al clickar en un menú, si el
formulario que se tiene que abrir ya está abierto, que no lo vuelva a
abrir, sino que lo active.

Utilizo el siguiente código pero el BringToFront, ni se entera. ¿Alguna
idea de como activar el formulario hijo?



Gracias



Private Sub Mnu_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Mnu.Click

Dim FormularioHijo As New FrmMtoClientes

If FormularioAbierto("FrmMtoClientes") = True Then

FormularioHijo.BringToFront()

Else

FormularioHijo.MdiParent = Me

FormularioHijo.Show()

End If

End Sub



Function FormularioAbierto(ByVal nb_formulario As String) As Boolean

FormularioAbierto = False

Dim Formu As Form

For Each Formu In Application.OpenForms

If Formu.Name = nb_formulario Then

FormularioAbierto = True

End If

Next

End Function

Preguntas similares