Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Activar un formulario MDICHILD que ya está abierto

24 views
Skip to first unread message

Ira

unread,
Apr 20, 2010, 6:57:49 AM4/20/10
to
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


L. Garcia

unread,
Apr 20, 2010, 10:17:39 AM4/20/10
to
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" <alban...@gmail.com> escribió en el mensaje
news:OExGuiH4...@TK2MSFTNGP06.phx.gbl...


> 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

SysEdw

unread,
Apr 20, 2010, 4:57:01 PM4/20/10
to
hola prueba con este codigo

Public Sub MostrarVentana(ByVal Formulario As Form, ByVal Mdi As Form)
Dim Frmllamado As Form
Formulario.Text = Formulario.Name
Dim Escargado As Boolean = False
For Each Frmllamado In Mdi.MdiChildren
If Frmllamado.Text = Formulario.Text Then
Escargado = True
Exit For
End If
Next
If Not Escargado Then
Formulario.MdiParent = Mdi
Formulario.StartPosition = FormStartPosition.CenterScreen
Formulario.Show()
ElseIf Escargado Then
Formulario.Focus()
End If
End Sub
para llamar es algo

MostrarVentana(frmTipoDocente, Me)


espero que te sirva
"L. Garcia" wrote:

> .
>

Ira

unread,
Apr 21, 2010, 3:45:46 AM4/21/10
to
Muy bueno. Funciona a la perfección. Gracias

"L. Garcia" <liuxi...@redestb.es> escribió en el mensaje
news:u3iQlhJ4...@TK2MSFTNGP05.phx.gbl...

Lord Voldemort - Ferretero

unread,
Apr 21, 2010, 11:48:31 AM4/21/10
to
podes usar simplemente..

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

My.Forms.MiFormulario.Show

end codigo..


y ya estuvo...
como es un hijo, sino esta creado lo crea y si ya esta creado lo muestra...

saludos

"Ira" <alban...@gmail.com> escribió en el mensaje de
noticias:OP1wDcS4...@TK2MSFTNGP05.phx.gbl...

0 new messages